Transformation de caractères : tr

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.

Etiquettes: