← Sommaire SkyLinux

tr — Transformez du texte facilement

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.

Syntaxe de base

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' # pipe
tr 'a' 'A' < fichier.txt # redirection

Les classes de caractères

Au lieu de taper tous les caractères, tr reconnaît des classes prédéfinies très pratiques :

ClasseDescriptionExemple
[:alnum:]Lettres et chiffresa-z, A-Z, 0-9
[:alpha:]Lettres seulementa-z, A-Z
[:lower:]Lettres minusculesa-z
[:upper:]Lettres majusculesA-Z
[:digit:]Chiffres0-9
[:space:]Espaces blancsespace, tab, newline
[:punct:]Ponctuation.,!?;:...
[:blank:]Espaces et tabulationsespace, tabulation

Convertir majuscules et minuscules

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

Supprimer des caractères

L'option -d (delete) supprime tous les caractères spécifiés de l'entrée :

# Supprimer tous les chiffres
echo "Mon mot de passe est Pass123!" | tr -d '[:digit:]'

Résultat : Mon mot de passe est Pass!

# Supprimer les espaces
echo "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.txt

Compresser et squeeze

L'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 seul
echo "texte avec beaucoup d'espaces" | tr -s ' '

Résultat : texte avec beaucoup d'espaces

# Compacter aussi les tabulations en espaces
echo "a b c" | tr -s '[:blank:]'

Remplacer des caractères précis

Pour remplacer un caractère par un autre, donnez les deux ensembles dans le même ordre :

# Remplacer les underscores par des tirets
echo "nom_fichier_test" | tr '_' '-'

Résultat : nom-fichier-test

# Remplacer les voyelles par des points
echo "Bonjour" | tr 'aeiou' '.'

Résultat : B.n.j.r

Transformer en colonnes (utiliser avec cut)

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 pipes
cat fichier.txt | tr ';' '|'

Supprimer les retours chariot Windows (CRLF → LF)

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 -d
tr -d '\r' < fichier_windows.txt > fichier_unix.txt
# Alternative : remplacer CRLF par LF
cat fichier_windows.txt | tr -d '\r' > fichier_unix.txt

Compter les caractères ou lignes

tr 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 texte
echo "elephant" | tr -cd 'e' | wc -c

Résultat : 3

Mode translate (sans -d ni -s)

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 majuscules
echo "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)

Combiner tr avec des groupes

Vous pouvez spécifier des plages de caractères directement avec les crochets :

# Tout mettre en majuscules
echo "test 123" | tr '[a-z]' '[A-Z]'
# Garder uniquement les chiffres et les lettres
echo "abc123!@#def456" | tr -cd '[:alnum:]'

Résultat : abc123def456

Exercices pratiques

  1. Transforme un fichier texte pour qu'il soit entièrement en majuscules : cat fichier.txt | tr '[:lower:]' '[:upper:]'
  2. Supprime tous les espaces d'un texte : echo "un texte avec des espaces" | tr -d ' '
  3. Remplace tous les tirets bas (_) par des points dans un nom de fichier.
  4. Transforme un fichier CSV (séparateur ;) en TSV (séparateur tabulation).
  5. Nettoie un fichier Windows en supprimant les retours chariot \r.
  6. Compresse les espaces multiples en un seul espace : tr -s ' '
  7. Utilise tr avec cut pour extraire une colonne et la convertir en majuscules.
  8. Compte le nombre de caractères uniques différents dans un fichier : cat fichier.txt | tr -d '\n' | grep -o '.' | sort -u | wc -l

Résumé

CommandeEffet
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.