tr, abréviation de translate, traduit, supprime ou compresse les caractères lus sur stdin. Il n'accepte pas de fichier d'entrée ordinaire : utilisez un tube ou une redirection.
tr [OPTIONS] SET1 [SET2]
Text-Fu · Leçon 13
Apprenez à traduire, supprimer et compresser des ensembles de caractères dans un flux d'entrée standard.
tr, abréviation de translate, traduit, supprime ou compresse les caractères lus sur stdin. Il n'accepte pas de fichier d'entrée ordinaire : utilisez un tube ou une redirection.
tr [OPTIONS] SET1 [SET2]
tr agit sur des ensembles de caractères, pas sur des mots ni des expressions régulières générales.
Avec deux ensembles, les caractères de SET1 correspondent par position à ceux de SET2 :
$ echo "hello world" | tr a-z A-Z
HELLO WORLD
Vous pouvez aussi traduire un seul caractère :
$ echo "2026-06-23" | tr '-' '/'
2026/06/23
Ou associer plusieurs caractères par position :
$ echo "abc123" | tr 'abc' 'ABC'
ABC123
Citez les ensembles afin que le shell les transmette inchangés. Les caractères absents de SET1 sont conservés.
Que produit printf '%s\n' 'abc123' | tr 'abc' 'ABC' ?
-d retire chaque caractère correspondant :
$ echo "My address is 123 Main Street" | tr -d '0-9'
My address is Main Street
Les classes de caractères décrivent des groupes définis par la locale :
$ echo "Hello, world!" | tr -d '[:punct:]'
Hello world
Supprimer les retours à la ligne joint les lignes sans séparateur :
$ printf "one\ntwo\nthree\n" | tr -d '\n'
onetwothree
Les classes décrivent des groupes selon la locale. Supprimer les retours à la ligne joint les lignes sans ajouter de séparateur.
:::single-choice{#tr-delete-digits} Quelle commande retire tous les chiffres de stdin sans toucher aux autres caractères ?
::option[tr -d '[:digit:]']{#tr-delete-digit-class .correct explanation="-d supprime tous les membres de la classe des chiffres."}
::option[tr -s '[:digit:]']{#tr-squeeze-digits explanation="-s réduit les répétitions mais conserve un caractère par série."}
::option[tr '[:digit:]']{#tr-one-set-no-delete explanation="Une traduction exige normalement un second ensemble ; cette forme ne demande pas une suppression."}
:::
-s SET remplace chaque série d'un caractère indiqué par une seule occurrence :
$ echo "Hello World, how are you?" | tr -s ' '
Hello World, how are you?
Vous pouvez aussi compresser les retours à la ligne répétés :
$ printf "one\n\n\nTwo\n" | tr -s '\n'
one
Two
Un ensemble contenant un espace ordinaire ne compresse ni tabulations ni retours à la ligne.
Quelle commande réduit chaque série d'espaces ordinaires de stdin à un espace ?
Classes courantes : [:lower:], [:upper:], [:digit:], [:alpha:], [:alnum:], [:space:] et [:punct:].
$ echo "linux journey" | tr '[:lower:]' '[:upper:]'
LINUX JOURNEY
-c complète le premier ensemble ; combiné à -d, il conserve seulement les catégories voulues :
$ echo "user@example.com!" | tr -cd '[:alnum:]'
userexamplecom
-c complète SET1, donc désigne tout caractère qui n'en fait pas partie. Avec -d, la seconde commande conserve uniquement les caractères alphanumériques ; elle retire aussi le retour à la ligne.
Que fait tr -cd '[:alnum:]' à stdin ?
$ echo "Hello,,, world!!!" | tr -d '[:punct:]' | tr -s ' '
Hello world
Pour une entrée tabulée simple, traduisez les tabulations en virgules :
$ printf "name\tlevel\npete\tbeginner\n" | tr '\t' ','
name,level
pete,beginner
Comme tr lit stdin, un fichier peut être fourni avec < :
$ tr '[:lower:]' '[:upper:]' < names.txt
Enchaînez plusieurs tr lorsque les étapes sont plus claires séparément. Pour sauvegarder, redirigez stdout vers un autre fichier ; une redirection vers l'entrée la tronquerait avant lecture.
:::single-choice{#tr-read-file-input} Quelle commande fait lire names.txt sur stdin et convertit les minuscules en majuscules ?
::option[tr names.txt '[:lower:]' '[:upper:]']{#tr-file-operand explanation="tr n'accepte pas ainsi un nom de fichier d'entrée ordinaire."}
::option[tr -d '[:lower:]' < names.txt]{#tr-delete-lowercase explanation="Cette forme lit le fichier mais supprime les minuscules."}
::option[tr '[:lower:]' '[:upper:]' < names.txt]{#tr-input-redirection .correct explanation="Le shell ouvre le fichier sur stdin et tr associe les classes de casse."}
:::
Pour vous exercer :
Leçon terminée
Vous savez transformer des flux de caractères avec tr.
Associer les caractères de deux ensembles.
Supprimer avec -d.
Compresser les répétitions avec -s.
Utiliser classes et compléments avec discernement.
Fournir l'entrée par stdin et non comme opérande de fichier.
Créez un compte gratuit pour enregistrer cette leçon et continuer sur n'importe quel appareil.
Créer un compte gratuit