tr (pour translate) est un outil unix qui lit sur l'entrée standard et transforme chaque caractère selon les règles que vous définissez. C'est l'outil idéal pour convertir des majuscules en minuscules, supprimer des caractères spécifiques, remplacer des lettres, ou compacter des espaces. Simple mais terriblement efficace.
tr [OPTION] ENSEMBLE1 [ENSEMBLE2]tr ne lit pas de fichiers directement — il travaille sur l'entrée standard. Pour traiter un fichier, vous utiliserez donc un tube ou une redirection :
cat fichier.txt | tr 'a' 'A' # pipetr 'a' 'A' < fichier.txt # redirectionAu lieu de taper tous les caractères, tr reconnaît des classes prédéfinies très pratiques :
| Classe | Description | Exemple |
|---|---|---|
[:alnum:] | Lettres et chiffres | a-z, A-Z, 0-9 |
[:alpha:] | Lettres seulement | a-z, A-Z |
[:lower:] | Lettres minuscules | a-z |
[:upper:] | Lettres majuscules | A-Z |
[:digit:] | Chiffres | 0-9 |
[:space:] | Espaces blancs | espace, tab, newline |
[:punct:] | Ponctuation | .,!?;:... |
[:blank:] | Espaces et tabulations | espace, tabulation |
C'est l'utilisation la plus courante de tr. Pour mettre tout en majuscules :
echo "Bonjour le monde" | tr 'a-z' 'A-Z'Résultat : BONJOUR LE MONDE
Pour mettre tout en minuscules, utilisez les classes pour plus de robustesse :
echo "BONJOUR LE MONDE" | tr '[:upper:]' '[:lower:]'Résultat : bonjour le monde
L'option -d (delete) supprime tous les caractères spécifiés de l'entrée :
# Supprimer tous les chiffresecho "Mon mot de passe est Pass123!" | tr -d '[:digit:]'Résultat : Mon mot de passe est Pass!
# Supprimer les espacesecho "texte avec espaces" | tr -d ' 'Résultat : texteavecespaces
# Supprimer les caractères de contrôle (retour chariot Windows)cat fichier_windows.txt | tr -d '\r' > fichier_unix.txtL'option -s (squeeze) remplace les occurrences répétées par une seule. Très utile pour compacter les espaces :
# Remplacer plusieurs espaces par un seulecho "texte avec beaucoup d'espaces" | tr -s ' 'Résultat : texte avec beaucoup d'espaces
# Compacter aussi les tabulations en espacesecho "a b c" | tr -s '[:blank:]'Pour remplacer un caractère par un autre, donnez les deux ensembles dans le même ordre :
# Remplacer les underscores par des tiretsecho "nom_fichier_test" | tr '_' '-'Résultat : nom-fichier-test
# Remplacer les voyelles par des pointsecho "Bonjour" | tr 'aeiou' '.'Résultat : B.n.j.r
tr combine très bien avec cut (vu à la leçon 53) pour transformer du texte tabulé :
# Remplacer les tabulations par des virgules (CSV)cut -f1,2 -d$'\t' donnees.txt | tr '\t' ',' > donnees.csv# Remplacer les points-virgule par des pipescat fichier.txt | tr ';' '|'Un problème très courant : les fichiers texte créés sous Windows finissent par \r\n au lieu de \n. tr résout ça en une commande :
# Méthode simple avec -dtr -d '\r' < fichier_windows.txt > fichier_unix.txt# Alternative : remplacer CRLF par LFcat fichier_windows.txt | tr -d '\r' > fichier_unix.txttr peut servir à compter des éléments en combinant avec wc :
# Compter le nombre de mots (un mot = groupe de lettres)cat fichier.txt | tr -cs '[:alpha:]' '\n' | wc -l# Compter les caractères 'e' dans un texteecho "elephant" | tr -cd 'e' | wc -cRésultat : 3
Sans options, tr remplace chaque caractère de l'ensemble 1 par le caractère correspondant de l'ensemble 2 — c'est le mode "translate" classique :
# Convertir en majusculesecho "hello" | tr 'a-z' 'A-Z'# Chiffrer un texte (substitution simple)echo "secret message" | tr 'a-z' 'n-za-m'Résultat : frperg zrfxfgr (ROT13)
Vous pouvez spécifier des plages de caractères directement avec les crochets :
# Tout mettre en majusculesecho "test 123" | tr '[a-z]' '[A-Z]'# Garder uniquement les chiffres et les lettresecho "abc123!@#def456" | tr -cd '[:alnum:]'Résultat : abc123def456
cat fichier.txt | tr '[:lower:]' '[:upper:]'echo "un texte avec des espaces" | tr -d ' '_) par des points dans un nom de fichier.;) en TSV (séparateur tabulation).\r.tr -s ' 'tr avec cut pour extraire une colonne et la convertir en majuscules.cat fichier.txt | tr -d '\n' | grep -o '.' | sort -u | wc -l| Commande | Effet |
|---|---|
tr 'a-z' 'A-Z' | Convertir en majuscules |
tr 'A-Z' 'a-z' | Convertir en minuscules |
tr -d 'car' | Supprimer un caractère |
tr -s ' ' | Compresser les espaces |
tr -d '\r' | Supprimer les retours chariot Windows |
tr -cd '[:digit:]' | Garder uniquement les chiffres |
tr est un outil simple mais puissant pour manipuler du texte caractère par caractère. Combiné avec d'autres commandes via des pipes, il devient un allié précieux pour le nettoyage et la transformation de données.