tr
est un utilitaire de ligne de commande dans les systèmes Linux et Unix qui traduit, supprime et comprime les caractères de l'entrée standard et écrit le résultat sur la sortie standard.
Le tr
La commande peut effectuer des opérations telles que la suppression de caractères répétés, la conversion de majuscules en minuscules et le remplacement et la suppression de caractères de base. En règle générale, il est utilisé en combinaison avec d'autres commandes via la tuyauterie.
Dans ce tutoriel, nous allons vous montrer comment utiliser le tr
commande à travers des exemples pratiques et des explications détaillées des options les plus courantes.
Comment utiliser le tr
Commande #
La syntaxe du tr
commande est la suivante :
tr OPTION... SET1 [SET2]
tr
accepte deux ensembles de caractères, généralement de même longueur, et remplace les caractères des premiers ensembles par les caractères correspondants du second ensemble.
Un SET
est essentiellement une chaîne de caractères, y compris les caractères spéciaux échappés par une barre oblique inverse.
Dans l'exemple suivant, tr
remplacera tous les caractères de l'entrée standard (linuxize), en mappant les caractères du premier ensemble avec ceux correspondants du second ensemble.
echo 'linuxize' | tr 'lin' 'red'
Chaque occurrence de l
est remplacé par r
, i
avec e
, et n
avec d
:
reduxeze
Les jeux de caractères peuvent également être définis à l'aide de plages de caractères. Par exemple, au lieu d'écrire :
echo 'linuxize' | tr 'lmno' 'wxyz'
vous pouvez utiliser :
echo 'linuxize' | tr 'l-n' 'w-z'
Quand -c
(--complement
) l'option est utilisée, tr
remplace tous les caractères qui ne sont pas dans SET1.
Dans l'exemple ci-dessous, tous les caractères sauf "li" seront remplacés par le dernier caractère du deuxième jeu :
echo 'linuxize' | tr -c 'li' 'xy'
liyyyiyyy
Comme vous l'avez peut-être remarqué, la sortie ci-dessus a un caractère visible de plus que l'entrée. C'est parce que le echo
la commande imprime un caractère de retour à la ligne invisible \n
qui est également remplacé par y
. Pour renvoyer une chaîne sans nouvelle ligne, utilisez le -n
option.
Le -d
(--delete
) l'option indique tr
pour supprimer les caractères spécifiés dans SET1. Lors de la suppression de caractères sans compression, spécifiez un seul jeu.
La commande ci-dessous supprimera l
, i
et z
caractères :
echo 'Linuxize' | tr -d 'liz'
Le L
le caractère n'est pas supprimé car l'entrée comprend un L
majuscule tandis que le l
caractère dans le SET est en minuscule.
Lnuxe
Le -s
(--squeeze-repeats
) remplace une séquence d'occurrences répétées par le jeu de caractères du dernier SET.
Dans l'exemple suivant, tr
supprime les espaces répétés :
echo "GNU \ Linux" | tr -s ' '
GNU \ Linux
Lorsque SET2 est utilisé, la séquence de caractères spécifiée dans SET1 est remplacée par SET2.
echo "GNU \ Linux" | tr -s ' ' '_'
GNU_\_Linux
Le -t
(--truncate-set1
) l'option force tr
pour tronquer SET1 à la longueur de SET2 avant de poursuivre le traitement.
Par défaut, si SET1 est supérieur à SET2 tr
réutilisera le dernier caractère de SET2. Voici un exemple :
echo 'Linux ize' | tr 'abcde' '12'
La sortie montre que le caractère e
de SET1 correspond au dernier caractère de SET2, qui est 2
:
Linux iz2
Maintenant, utilisez la même commande avec le -t
choix :
echo 'Linux ize' | tr -t 'abcde' '12'
Linux ize
Vous pouvez voir que les trois derniers caractères du SET1 sont supprimés. SET1 devient 'ab', la même longueur que SET2, et aucun remplacement n'est effectué.
Combiner les options #
Le tr
La commande vous permet également de combiner ses options. Par exemple, la commande suivante remplace d'abord tous les caractères sauf i
avec 0
puis serre le 0
répété caractères :
echo 'Linux ize' | tr -cs 'i' '0'
0i0i0
Exemples de commande Tr #
Dans cette section, nous aborderons quelques exemples d'utilisations courantes du tr
commande.
Convertir les minuscules en majuscules #
La conversion de minuscules en majuscules ou inversées est l'un des cas d'utilisation typiques du tr
commande. [:lower:]
correspond à tous les caractères minuscules et [:upper:]
correspond à tous les caractères majuscules.
echo 'Linuxize' | tr '[:lower:]' '[:upper:]'
LINUXIZE
Au lieu de classes de caractères, vous pouvez également utiliser des plages :
echo 'Linuxize' | tr 'a-z' 'A-Z'
Pour convertir les majuscules en minuscules, il suffit de changer les places des ensembles.
Supprimer tous les caractères non numériques #
La commande suivante supprime tous les caractères non numériques :
echo "my phone is 123-456-7890" | tr -cd [:digit:]
[:digit:]
représente tous les caractères numériques, et en utilisant le -c
option, la commande supprime tous les caractères non numériques. La sortie ressemblera à ceci :
1234567890
Mettre chaque mot dans une nouvelle ligne #
Pour mettre chaque mot dans une nouvelle ligne, nous devons faire correspondre tous les caractères non alphanumériques et les remplacer par une nouvelle ligne :
echo 'GNU is an operating system' | tr -cs '[:alnum:]' '\n'
GNU
is
an
operating
system
Supprimer les lignes vides #
Pour supprimer les lignes vides, pressez simplement les caractères de retour à la ligne répétitifs :
tr -s '\n' < file.txt > new_file.txt
Dans la commande ci-dessus, nous utilisons le symbole de redirection <
pour passer le contenu du file.txt
au tr
commande. La redirection >
écrit la sortie de la commande dans new_file.txt
.
Imprimer $PATH
répertoires sur une ligne séparée #
Le $PATH
La variable d'environnement est une liste de répertoires séparés par deux-points qui indique au shell dans quels répertoires rechercher les fichiers exécutables lorsque vous tapez une commande.
Pour imprimer chaque répertoire sur une ligne distincte, nous devons faire correspondre les deux-points (:
) et remplacez-le par la nouvelle ligne :
echo $PATH | tr ':' '\n'
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
Conclusion #
tr
est une commande pour traduire ou supprimer des caractères.
Bien que très utile, tr
ne peut fonctionner qu'avec des caractères uniques. Pour une correspondance de modèle et une manipulation de chaîne plus complexes, vous devez utiliser sed
ou awk
.
Si vous avez des questions ou des commentaires, n'hésitez pas à laisser un commentaire.