Scroll to navigation

TR(1) Manuel de l'utilisateur Linux TR(1)

NOM

tr - Transposer ou éliminer des caractères

SYNOPSIS

tr [-cst] [--complement] [--squeeze-repeats] [--truncate-set1] chaîne_1 chaîne_2
tr {-s,--squeeze-repeats} [-c] [--complement] chaîne_1
tr {-d,--delete} [-c] chaîne_1
tr {-d,--delete} {-s,--squeeze-repeats} [-c] [--complement] chaîne_1 chaîne_2

La version GNU de tr accepte également les options --help et --version.

DESCRIPTION

Cette page de manuel documente la version GNU de tr.

tr copie son entrée standard sur sa sortie standard en effectuant l'une des manipulations suivantes :

• transposer, et éventuellement réunir les caractères dupliqués de la chaîne résultante
• réunir les caractères dupliqués
• supprimer des caractères
• supprimer des caractères, et éventuellement réunir les caractères dupliqués de la chaîne résultante

Les arguments chaîne1 et (éventuellement) chaîne2 décrivent des ensembles ordonnés de caractères, que l'on mentionnera plus bas sous les noms de jeu1 et jeu2. Ces ensembles représentent les caractères de l'entrée standard sur lesquels tr travaillera. L'option --complement (-c) remplace jeu1 par son complément (tous les caractères n'appartenant pas à jeu1).

DÉFINIR LES ENSEMBLES DE CARACTÈRES

Le format des arguments chaîne1 et chaîne2 ressemble à celui des expressions rationnelles. Il ne s'agit toutefois pas d'expressions rationnelles, mais simplement de listes de caractères. La plupart des caractères sont représentes par eux-mêmes, néanmoins les chaînes peuvent également contenir des raccourcis plus simples décrits ci-dessous. Certains de ces raccourcis ne peuvent être utilisés que dans chaîne1 ou que dans chaîne2, comme c'est mentionné ci-dessous.

Séquences avec BackSlash. Un backslash suivi d'un caractère non défini ci-dessous déclenche un message d'erreur.

Contrôle-G.
Contrôle-H.
Contrôle-L.
Contrôle-J.
Contrôle-M.
Contrôle-I.
Contrôle-K.
Le caractère de valeur octale ooo, s'étendant sur 1 à 3 chiffres.
\\
BackSlash.

Intervalles. La notation `m-n' représente tous les caractères compris entre m et n, en ordre croissant. m doit être inférieur à n, sinon une erreur se produit. Par exemple, `0-9' est équivalent à `0123456789'. Bien que la version GNU de tr ne supporte pas la syntaxe System V qui utilise des crochets pour indiquer les intervalles, les transpositions spécifiées avec ce format fonctionneront quand même si les crochets de chaîne1 correspondent à des crochets identiques de chaîne2.

Répétition de caractères. La notation `[c*n]' dans chaîne2 se développe en n copies du caractère c. Ainsi, `[y*6]' est équivalent à `yyyyyy'. La notation `[c*]' dans chaîne2 se développe en autant de copie de c qu'il le faut pour rendre le jeu2 aussi long que jeu1. Si n commence par 0, il est interprété en octal, sinon en décimal.

Classes de caractères. La notation `[:nom-classe:]' correspond à l'ensemble de tous les caractères appartenant à la classe (prédéfinie) nom-classe. Les caractères ne se présentent pas dans un ordre particulier, sauf pour les classes `upper' `lower' dont les membres sont en ordre croissant. Quand les options --delete (-d) et --squeeze-repeats (-s) sont utilisées simultanément, n'importe quelle classe de caractères peut être mentionnée dans chaîne2. Autrement, seules les classes `lower' et `upper' sont acceptées dans string2, et ceci seulement si la classe correspondante (`upper' et `lower', respectivement) est mentionnée à la même position relative dans chaîne1. Ceci permet de convertir le type majuscule/minuscule des caractères. Les noms de classes sont indiqués ci-dessous. Une erreur se produit si l'on tente d'utiliser un nom de classe invalide.

Lettres et chiffres.
Lettres.
Caractères d'espacement horizontaux.
caractères de contrôle.
Chiffres.
caractères imprimables, sauf l'espace.
Lettres minuscules.
caractères imprimables, y compris l'espace.
caractères de ponctuation.
Caractères d'espacement horizontaux ou verticaux.
Lettres majuscules.
Chiffres hexadécimaux.

Classes d'équivalence. La syntaxe `[=c=]' se développe en l'ensemble des caractères équivalents à c, sans ordre particulier. Les classes d'équivalence sont une invention récente destinée à supporter les alphabets autres que l'anglais. Mais il n'y a pas de manière standard de les définir ou de connaître leur contenu. Ainsi elles ne sont pas totalement implémentées dans la version GNU de tr. La classe d'équivalence d'un caractère est composée uniquement de ce caractère, ce qui rend ces classes inutiles actuellement.

[NDT] Il serait pourtant bien pratique que la classe d'équivalence d'un caractère contienne également ses versions accentuées...

TRADUCTION

tr effectue les traductions de caractères lorsqu'on lui fournit à la fois chaîne1 et chaîne2, et si l'on n'utilise pas l'option --delete (-d). tr transpose chaque caractère d'entrée appartenant au jeu1 en un caractère correspondant du jeu2. Les caractères non trouvés dans jeu1 sont copies sans modification. Quand un caractère apparaît plusieurs fois dans jeu1, et si les caractères correspondants de jeu2 ne sont pas toujours les mêmes, seule la version finale est utilisée. Par exemple ces deux commandes sont équivalentes :

tr aaa xyz
tr a z

Un usage classique de tr est la conversion de minuscules en majuscules. Ceci peut être réalisé de nombreuses manières différentes. En voici trois :

tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
tr a-z A-Z
tr '[:lower:]' '[:upper:]'

[NDT] Une utilisation pratique pour nous est la suppression des accents d'un texte. En voici un exemple supprimant les accents utilisés en français.

tr "àçéèêëîïôöùüÂÇÉÈÊËÎÏÔÖÙÜ" "aceeeeiioouuACEEEEIIOOUU"

Quand tr effectue une traduction, jeu1 et jeu2 doivent normalement avoir la même longueur. Si jeu1 est plus court que jeu2, les caractères supplémentaires en fin de jeu2 sont ignorés.

D'autre part, si jeu1 est plus long que jeu2, la portabilité n'est pas assurée. POSIX.2 précise que dans ce cas le comportement est indéfini. La version BSD de tr complète jeu2 jusqu'à la même longueur que jeu1 en répétant son dernier caractère de fois autant que nécessaire. La version System V de tr tronque jeu1 à la même longueur que jeu2.

Par défaut, la version GNU de tr se comporte comme la version BSD. Quand l'option --truncate-set1 (-t) est mentionnée, elle se comporte comme la version System V. Cette option n'a pas d'effet pour les autres manipulations que les traductions.

Le comportement System V de tr rend impossible la commande BSD classique

tr -cs A-Za-z0-9 '\012'
car elle ne convertit que les octets nuls (le premier élément du complément de jeu1) en Saut de Ligne, au lieu de convertir tous les caractères non-alphanumériques.

ÉLIMINER LES RÉPÉTITIONS ET EFFACER DES CARACTÈRES

Quand seule l'option --delete (-d) est fournie, tr supprime tous les caractères d'entrée présents dans jeu1.

Quand seule l'option --squeeze-repeats (-s) est fournie, tr remplace chaque répétitions de caractères appartenant au jeu1 par une seule occurrence de ce caractère.

Quand les deux options --delete et --squeeze-repeats sont réclamées en même temps, tr effectue d'abord toutes les suppressions des caractères de jeu1, puis élimine les répétitions des caractères appartenant au jeu2.

L'option --squeeze-repeats peut également être utilisée pendant les traductions, auquel cas tr effectue d'abord la transposition, puis élimine les répétitions de caractères appartenant au jeu2.

Voici quelques exemples destinés à illustrer diverses combinaisons des options :

Supprimer les octets nuls :

tr -d '\000'

Afficher chaque mot sur une ligne indépendante. Ceci convertit tous les caractères non alphanumériques en sauts de lignes, puis regroupe les lignes blanches successives en un seul saut de ligne :

tr -cs '[a-zA-Z0-9]' '[\n*]'

Convertir les séquences de sauts de lignes en un seul saut de ligne (ceci supprime les lignes blanches) :

tr -s '\n'

La version GNU de tr accepte également les options supplémentaire suivantes :

Afficher un message d'aide sur la sortie standard et se terminer normalement.
Afficher un numéro de version sur la sortie standard et se terminer normalement.

MESSAGE D'AVERTISSEMENT

Lorsque la variable d'environnement POSIXLY_CORRECT est validée, plusieurs messages d'erreurs et d'avertissements sont inhibés, afin d'assurer une compatibilité stricte avec POSIX.2. Les messages en question se produisent dans les circonstances suivantes :

1. Quand l'option --delete est utilisée sans l'option --squeeze-repeats, et si chaîne2 est fournie, la version GNU de tr affiche par défaut un message d'erreur et se termine, car chaîne2 ne serait pas utilisée. Les spécifications POSIX indiquent que dans ce cas chaîne2 doit simplement être ignorée. Ignorer un argument sans prévenir l'utilisateur n'est pas une bonne idée.

2. Quand un nombre octal ambigu est fourni par une séquence d'échappement. Par exemple \400 correspond en réalité au caractère \40 suivi du chiffre 0, car la valeur octale 400 ne tient pas dans un octet.

Remarquez que la version GNU de tr ne fournit pas de compatibilité totale BSD ou System V. Par exemple, il n'y a pas d'option pour inhiber l'interprétation des séquences POSIX [:alpha:], [=c=], et [c*10]. Remarquez également que la version GNU de tr ne supprime pas les octets nuls automatiquement contrairement aux versions UNIX traditionnelles, avec lesquelles il n'y a pas de moyen de conserver les octets nuls.

TRADUCTION

Christophe Blaess, 1997-2003.

30 juillet 2003 coreutils