tr : Traduire ou supprimer des caractères
Table des matières
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 :
- 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 :
Attention, dans les motifs, la commande tr est sensible à la casse.
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 :
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:
On peut aussi utiliser des expressions régulières.
Par exemple, pour mettre en majuscules les lettres de A à M :
On va pouvoir changer la casse, grâce aux syntaxes upper et lower. Par exemple, pour traduire toutes les majuscules en minuscules :
Parmi les syntaxes couramment utilisées possibles, on a :
Afficher le $PATH qui est séparé par le symbole deux-points avec un chemin par ligne (remplacer : par \n) :
L'option -d permet de supprimer des caractères.
Par exemple, pour retier les "o" et les "i" :
Par exemple, pour supprimer les sauts de lignes de cette commande ls :
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" :
L'option -c permettra le complément des caractères (en gros inverser).
Avec cet exemple, tout caractère non alpha numérique sera remplacé par un soulignement :
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) :
Petit truc sympa par exemple, on va générer du contenu à partir de urandom, et retirer les caractères non affichables :
Bien sûr, on peut faire encore plus de choses, mais c'est déjà un bon début !
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 le complément des caractères (en gros inverser).
Avec cet exemple, tout caractère non alpha numérique sera remplacé par un soulignement :
Code BASH :
echo 'Bonjour ... 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 !