Tr

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Traitement de texte (filtre de flux)
Commande tr
Contexte transformation caractère à caractère, généralement en pipe avec d'autres commandes
Voir aussi Sed (édition de flux)

tr (translittère ou supprime des caractères) est un filtre qui lit son entrée standard et transforme chaque caractère selon un ou deux ensembles de caractères passés en argument. Il ne travaille jamais directement sur un fichier : on l'utilise toujours en pipe ou avec une redirection d'entrée.

Syntaxe

tr [OPTIONS] ENSEMBLE1 [ENSEMBLE2]

Principales options :

  • -d : supprime les caractères de ENSEMBLE1 (pas de second ensemble)
  • -s : compresse les répétitions consécutives d'un même caractère en une seule occurrence (« squeeze »)
  • -c : complémente ENSEMBLE1, c'est-à-dire agit sur tous les caractères sauf ceux indiqués

Conversion de casse

echo "$1" | tr '[:lower:]' '[:upper:]'   # vers majuscules
echo "$1" | tr '[:upper:]' '[:lower:]'   # vers minuscules
echo "$MyString" | tr 'a-z' 'A-Z'        # équivalent avec des plages explicites

Bash offre aussi une syntaxe native pour ce cas précis, sans passer par tr :

echo "En minuscule : ${MyString,,}"
echo "En majuscule : ${MyString^^}"

Suppression et compression de caractères

tr -d '\n' < /tmp/sous_system > /tmp/system    # supprime tous les retours à la ligne (aplatit le fichier sur une seule ligne)
tr -s ' ' < fichier.txt                        # compresse les espaces multiples consécutifs en un seul
cat export.log | tr -s ' ' '\n' > export2.txt  # remplace chaque suite d'espaces par un retour à la ligne (un mot par ligne)

Alternative sed pour l'opération inverse

Pour rassembler toutes les lignes d'un fichier sur une seule ligne (séparateur espace), sed est mieux adapté que tr :

sed ':a;N;$!ba;s/\n/ /g' /tmp/sous_system

Voir aussi

  • Sed — édition de flux, complémentaire à tr pour les substitutions plus complexes