Commandes de base

tr : Traduire ou supprimer des caractères

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières

Introduction



La commande tr sous Linux est une commande de traduction de caractères. Elle permet de remplacer ou de supprimer des caractères dans une chaîne de texte. Elle peut aussi effectuer des conversions d'un jeu de caractère à un autre.

Cette commande fait partie de coreutils qui est disponible dans toutes les distributions Linux.

La syntaxe de la commande est la suivante :

Code BASH :
tr [options] MOTIF1 [MOTIF2]

- MOTIF1 : caractères à remplacer ou à supprimer,
- MOTIF2 : caractères de remplacement (facultatif, ne pas renseigner en cas de suppression)

La commande tr lit l'entrée standard, elle s'utilisera donc souvent sous cette forme :

Code BASH :
commande | tr [options] MOTIF1 [MOTIF2]


Attention, dans les motifs, la commande tr est sensible à la casse.

Utilisation par l'exemple



Nous allons voir l'utilisation par des exemples, ça sera plus parlant.

La base de tr étant de remplacer des caractères, voici comment remplacer les "u" par des "o" et les "i" en "u" dans le texte :

Code BASH :
echo cuicui | tr 'ui' 'ou'


Attention, cela ne va pas remplacer le "ui" par "ou" mais plus précisément les "u" par des "o" et des "i" par des "u".
Pour s'en convaincre, voyez avec cet exemple qui va générer bONjOur et non pas bONjour:
Code BASH :
echo bonjour | tr 'on' 'ON'


On peut aussi utiliser des expressions régulières.
Par exemple, pour mettre en majuscules les lettres de A à M :

Code BASH :
echo "bonjour à tous, ici adrien" | tr '[a-m]' '[A-M]'


On va pouvoir changer la casse, grâce aux syntaxes upper et lower. Par exemple, pour traduire toutes les majuscules en minuscules :

Code BASH :
echo COUCOU | tr [:upper:] [:lower:]


Parmi les syntaxes couramment utilisées possibles, on a :
Code :
[:alnum:]     Lettres et chiffres
[:alpha:]     Lettres
[:digit:]     Chiffres
[:space:]     Espaces
[:lower:]     Lettres minuscules
[:upper:]     Lettres majuscules
[:punct:]     Caractères de ponctuation
[:print:]     Caractères affichable
\n            Saut de ligne
\t            Tabulation


Afficher le $PATH qui est séparé par le symbole deux-points avec un chemin par ligne (remplacer : par \n) :

Code BASH :
echo $PATH | tr ':' '\n'


L'option -d permet de supprimer des caractères.

Par exemple, pour retier les "o" et les "i" :
Code BASH :
echo "Bonjour à tous, ici adrien" | tr -d 'oi'


Par exemple, pour supprimer les sauts de lignes de cette commande ls :
Code BASH :
ls -1 / | tr -d '\n'



L'option -s permet de supprimer les répétitions d'un caractère.

Par exemple, supprimer les répétitions du caractère "espace" :
Code BASH :
echo "Bonjour       à tous,    ici       Adrien" | tr -s [:space:]



L'option -c permettra compléter les caractères.

Avec cet exemple, tout caractère non alpha numérique sera remplacé par un soulignement :
Code BASH :
echo "Bonjour à tous, ici Adrien" | tr -c '[:alpha:]' '-'


Si cette option est combinée à -d (pour delete), on pourra donc ne conserver ce qui respecte le motif (pas de deuxième motif dans ce cas).
Dans cet exemple on ne conservera que les chiffres (31) :
Code BASH :
echo "Il y a 31 jours dans le mois de Mai" | tr -cd [:digit:]


Petit truc sympa par exemple, on va générer du contenu à partir de urandom, et retirer les caractères non affichables :
Code BASH :
head -1 /dev/urandom | tr -cd '[:print:]'



Bien sûr, on peut faire encore plus de choses, mais c'est déjà un bon début !