Transformation de caractères : tr

Transformation de caractères : tr

Par ronan, 1 août, 2025

La commande tr permet d'appliquer un traitement sur certains caractères d'un flux de données : suppression, substitutions ... Cette commande exploite uniquement les données arrivant sur l'entrée standard.

Syntaxe

tr [options] ensemble1 [ensemble2]
Principale option :
[-d caractères] : La liste des caractères qui doivent être supprimés du flux de données.

Substitution de caractères

Deux ensembles de caractères doivent être spécifiés. Chaque ensemble comporte le même nombre de caractères. Tout caractère de ensemble1 trouvé dans le flux de données est substitué par le caractère de même position situé dans ensemble2.

Exemples

La chaine abcd est traitée : chaque caractère b est remplacé par 2 et chaque caractère d est remplacé par 4.

$ echo abcd | tr bd 24
a2c4
$

Il est possible d'utiliser la notion d'intervalles de caractères en utilisant des crochets. Ici chaque minuscule est remplacée par une majuscule correspondante :

$ echo abcd | tr "[a-z]" "[A-Z]"
ABCD
$

Pour traiter un fichier, il faut utiliser la redirection :

$ cat fic1
ceci est un test
$ tr "[a-z]" "[A-Z]" < fic1
CECI EST UN TEST
$

Suppression de caractères

L'option -d permet de supprimer certains caractères du flux de données.

Exemples

Transformation d'un fichier au format DOS (fin de lignes "\r\n") en un format UNIX ("\n"). Retrait du caractère "\r" :

$ od -c fic100
0000000   c   e   c   i       e   s   t       u   n       t   e   s   t
0000020  \r  \n
0000022
$ tr -d '\r' < fic100 > fic101
$ od -c fic101
0000000   c   e   c   i       e   s   t       u   n       t   e   s   t
0000020  \n
0000021
$

En ajoutant l'option -c à l'option -d, la commande supprime tous les caractères non présents dans la liste passée en argument :

$ echo "Linux Pratique HS N°26 – Février/Mars 2013 – En kiosque" | tr -dc a-zA-Z; echo
LinuxPratiqueHSNFvrierMarsEnkiosque

La dernière commande echo permet uniquement d'afficher un retour à la ligne.

Générer un mot de passe alphanumérique aléatoire de 32 caractères

$  openssl rand -base64 32 | tr -dc '[:alnum:]' | head -c 32
5EXT2Y35HjCCApw3RsGfQRao8Qp80CCK

Insérer un retour à la ligne après chaque caractère non alphanumérique

$  echo -e 'Ceci est un texte avec des virgules, des points. On peut aussi mettre   plusieurs espaces    . Et ça fonctionne aussi avec des chiffres 465489423.' | tr -cs '[:alnum:]' '\n'
Ceci
est
un
texte
avec
des
virgules
des
points
On
peut
aussi
mettre
plusieurs
espaces
Et
a
fonctionne
aussi
avec
des
chiffres
465489423

 

Etiquettes

Hana (non vérifié)

il y a 6 ans 10 mois

Bonjour, comment faire alors dans l'autre sens. Genre tu as un fichier texte plein d'espace et tu veux faire apparaître les caractères invisibles via la commande tr ?
j'ai un fichier texte avec des caractères caches et je n'arrive pas a les afficher. Merci

La commande tr n'est pas faite pour ça.
La commande tr permet de transposer des caractères (remplacer, substituer)
Pour afficher des caractères (caractères spéciaux en l'occurence), la commande od avec l'option -c permet de le faire.
Les retours à la ligne seront affichés avec '\n', les espaces avec ' ', les tabulations avec '\t'