aperçu
sous Linux, il y a beaucoup d’utilitaires de ligne de commande pour la manipulation de texte à notre disposition. Dans ce tutoriel, nous allons discuter de la commande tr.
Introduction à la tr de la Commande
tr est l’abréviation de « traduire”. Il est membre du paquet GNU coreutils. Par conséquent, il est disponible dans toutes les distributions Linux.
la commande tr lit un flux d’octets à partir d’une entrée standard (stdin), traduit ou supprime des caractères, puis écrit le résultat dans la sortie standard (stdout).,
la syntaxe d’utilisation de tr est assez simple:
tr SET1
Si nous ne passons aucune option à tr, il remplacera chaque caractère dans SET1 par chaque caractère dans la même position dans SET2.
puisque tr ne prend pas en charge la lecture directe d’un fichier, si nous voulons l’appliquer à un fichier texte, nous devons rediriger le contenu du fichier vers tr ou rediriger le fichier vers stdin.,
nous pouvons utiliser tr pour effectuer des transformations de texte comme:
- conversion de casse de caractères
- compression de caractères répétitifs
- suppression de caractères spécifiques
- remplacement de texte de base
passons en revue quelques exemples pour apprendre à manipuler du texte en utilisant tr.
Convertir les minuscules en majuscules
Nous allons commencer par un problème de base: convertir tous les caractères minuscules en majuscules dans un fichier.,
voyons comment résoudre le problème en utilisant la commande tr:
$ cat baeldung.urlwww.baeldung.com$ tr 'a-z' 'A-Z' < baeldung.urlWWW.BAELDUNG.COM
dans l’exemple ci-dessus, nous avons redirigé un fichier baeldung.url vers stdin et a demandé à tr de faire la conversion de cas. Nous avons utilisé des plages de caractères dans SET1 et SET2 pour effectuer la conversion de casse.
alternativement, nous pouvons également résoudre le problème en utilisant quelques alias de jeu de caractères intégrés:
$ tr '' '' < baeldung.url WWW.BAELDUNG.COM
car tr n’écrira le résultat que sur stdout, après l’avoir exécuté, notre baeldung.le fichier url n’est pas modifié., Si nous voulons que le résultat traduit soit réécrit dans le fichier d’entrée, nous pouvons rediriger stdout vers un fichier temporaire, puis renommer et écraser le fichier d’entrée:
$ tr 'a-z' 'A-Z' < baeldung.url >tmp.txt && mv tmp.txt baeldung.url $ cat baeldung.urlWWW.BAELDUNG.COM
Basic Find and Replace
l’utilitaire tr est pratique pour certaines opérations simples « find and replace” où un caractère doit être remplacé par un autre. Par exemple, remplacons tous les traits d’Union par des traits de soulignement dans un fichier:
$ cat env.txt$JAVA-HOME and $MAVEN-HOME are system variables.$ cat env.txt | tr '-' '_'$JAVA_HOME and $MAVEN_HOME are system variables.
Au lieu d’utiliser la redirection, nous avons utilisé la commande cat pour canaliser le contenu du fichier env.txt à tr.,
en plus de trouver et de remplacer un seul caractère, tr peut également remplacer plusieurs caractères. Voyons un autre exemple de traduction des accolades entre parenthèses:
$ echo "{baeldung}" | tr '{}' '()'(baeldung)
Nous pouvons également utiliser tr pour faire la traduction de la plage de caractères., message ») en utilisant tr:
dans cet exemple, nous utiliserons le simple chiffrement César comme algorithme de chiffrement: remplacez chaque lettre dans le texte d’entrée par une lettre un nombre fixe de positions dans l’alphabet — Par exemple, changer « a” En « e », changer « b” en « f « , etc.:
$ echo "this is a secret message" | tr 'a-z' 'e-zabcd' > secret.txt$ cat secret.txtxlmw mw e wigvix qiwweki
pour déchiffrer le fichier secret, nous échangeons SET1 et SET2 dans la commande tr ci-dessus:
$ echo "this is a secret message" | tr 'a-z' 'e-zabcd' > secret.txt$ cat secret.txtxlmw mw e wigvix qiwweki
pour déchiffrer le fichier secret, nous échangeons SET1 et SET2 dans la commande tr ci-dessus:
$ tr 'e-zabcd' 'a-z' < secret.txt this is a secret message
tronquer un motif de recherche
si nous passons en revue les exemples de la section précédente, nous remarquons que Set1 et Set2 que nous avons passés à tr avaient toujours la même longueur.,
voyons ce que tr nous donnera si SET2 est plus court que SET1:
$ echo "abcdefg" | tr 'abcdefg' 'ABC'ABCCCCC
lorsque SET2 est plus court que SET1, la commande tr, par défaut, répète le dernier caractère de SET2. Par conséquent, nous voyons dans la sortie ci-dessus, la dernière lettre de SET2, qui est un « C », est répétée pour faire correspondre les lettres de « d” à « g ». Ainsi, la commande se transforme en tr ‘abcdefg »ABCCCCC’.,
nous pouvons utiliser l’option truncate « -t” pour changer ce comportement par défaut, pour laisser tr limiter la correspondance à la longueur de SET2:
$ echo "abcdefg" | tr -t 'abcdefg' 'ABC' ABCdefg
presser les caractères répétitifs
Nous pouvons supprimer les instances répétées d’un caractère en utilisant tr avec
voyons un exemple de conversion de plusieurs espaces continus en un seul espace:
$ echo 'Hi, nice to meet you!' | tr -s ' ' Hi, nice to meet you!
Si nous passons l’option-s avec SET1 et SET2 à tr, il fera d’abord la traduction, puis pressera les caractères répétés dans SET2., Par exemple:
$ echo 'TODAYYYY IIIS SOOO COOOLD ~' | tr -s 'A-Z' 'a-z' today is so cold ~
Supprimer des Caractères Spécifiques
Nous ne pouvons passer à l’option « -d” pour le tr pour supprimer des caractères dans SET1.
pas comme l’option « -s”, lorsque nous passons « -d” avec SET1 et SET2 à tr, le SET2 sera ignoré et aucune traduction ne sera effectuée.
par exemple, nous voulons supprimer toutes les lettres minuscules du texte d’entrée:
$ echo "A a B b C c" | tr -d 'a-z'A B C
rechercher le complément de SET1
Nous pouvons passer l’option « -c” à tr, pour lui faire rechercher un complément de SET1., Rechercher le complément de SET1 signifie rechercher l’inverse de SET1.
Parfois, cette option peut simplifier la définition de SET1.
par exemple, nous aimerions faire correspondre n’importe quel caractère qui n’est pas une lettre minuscule et le traduire en espaces:
$ echo "#aMvery~handy tool" | tr -c 'a-z' ' 'tr is a very handy tool
Nous pouvons également combiner l’option « -c” avec « -d” ou « -s”. L’exemple suivant montre comment extraire le numéro d’identification du client.fichier csv:
dans l’exemple ci-dessus, nous devons inclure le caractère de nouvelle ligne (\n) dans SET1., Sinon, tous les sauts de ligne dans le fichier d’entrée sera supprimé aussi, et nous aurons tous les numéros d’identification concaténées en une seule ligne. Ce n’est pas ce que nous voulons.
Conclusion
dans cet article, nous avons appris à utiliser la commande tr à travers divers exemples.
la commande tr est un bon choix si nous devons effectuer une transformation de texte fondamentale, telle que la conversion de casse ou la compression de caractères répétitifs.
cependant, si nous sommes confrontés à des problèmes de traitement de texte complexes, nous devrions penser à des utilitaires plus puissants comme awk ou sed.