Introduction
Dans cet atelier, nous allons explorer la commande tr sous Linux, un utilitaire polyvalent permettant de transformer du texte au niveau des caractères. La commande tr, abréviation de "translate" (traduire), est largement utilisée pour des tâches telles que la conversion de la casse, la suppression de caractères spécifiques et le nettoyage de données de base. À l'issue de cet atelier, vous saurez utiliser tr dans divers scénarios de manipulation de texte. Cet atelier est conçu pour les débutants : ne vous inquiétez pas si vous découvrez les commandes Linux, nous vous guiderons pas à pas.
Comprendre les bases de tr
Commençons par examiner la syntaxe de base de la commande tr :
tr [OPTION]... SET1 [SET2]
La commande tr lit le texte depuis l'entrée standard (stdin), le transforme selon les options et les jeux de caractères spécifiés, puis écrit le résultat sur la sortie standard (stdout).
Débutons par un exemple simple. Nous allons créer un fichier nommé greeting.txt contenant un message de salutation, puis utiliser tr pour convertir toutes les lettres minuscules en majuscules.
Tout d'abord, créez le fichier :
echo "hello, world" > ~/project/greeting.txt
Conseils : Vous pouvez copier et coller les commandes de création de fichiers dans le terminal pour vous assurer de leur exactitude.
Cette commande crée un nouveau fichier nommé greeting.txt dans votre répertoire de projet (~/project/) avec le contenu "hello, world".
Maintenant, utilisons tr pour convertir les minuscules en majuscules :
cat ~/project/greeting.txt | tr 'a-z' 'A-Z'
Vous devriez voir le résultat suivant :
HELLO, WORLD
Analysons cette commande :
cat ~/project/greeting.txt: Lit le contenu du fichier.|: C'est le symbole du tube (pipe). Il prend la sortie de la commande à sa gauche et l'envoie comme entrée à la commande à sa droite.tr 'a-z' 'A-Z': C'est notre commandetr. Elle traduit chaque caractère du premier ensemble ('a-z', qui représente toutes les minuscules) vers le caractère correspondant du second ensemble ('A-Z', qui représente toutes les majuscules).
Notez que cette commande ne modifie pas le fichier d'origine. Si vous souhaitez enregistrer le texte transformé, vous devrez rediriger la sortie vers un nouveau fichier.
Supprimer des caractères avec tr
La commande tr peut également supprimer des caractères spécifiques de l'entrée. C'est particulièrement utile pour nettoyer du texte en retirant des éléments indésirables. Créons un fichier contenant de la ponctuation, puis supprimons-la.
D'abord, créez un fichier avec de la ponctuation :
echo "Hello, World! How are you?" > ~/project/punctuated.txt
Conseils : Vous pouvez copier et coller les commandes de création de fichiers dans le terminal pour les créer correctement.
Maintenant, utilisons tr pour supprimer toute la ponctuation :
cat ~/project/punctuated.txt | tr -d '[:punct:]'
Vous devriez obtenir :
Hello World How are you
Analysons cette commande :
cat ~/project/punctuated.txt: Lit le contenu du fichier.|: Envoie la sortie vers la commandetr.tr -d '[:punct:]':- L'option
-dindique àtrde supprimer (delete) les caractères spécifiés. [:punct:]est une classe de caractères qui représente tous les signes de ponctuation. Les classes de caractères sont des ensembles prédéfinis qui facilitent la sélection de groupes de caractères.
- L'option
Cette commande retire tous les signes de ponctuation du texte, ne laissant que les lettres, les chiffres et les espaces.
Traduire plusieurs caractères
Explorons maintenant une translation plus complexe. Nous allons créer un fichier contenant du texte encodé et utiliser tr pour le décoder. Cet exemple montre comment tr peut servir à réaliser des opérations simples de chiffrement et déchiffrement.
D'abord, créez un fichier avec du texte encodé :
echo "Tijt jt b tfdsfu nfttbhf." > ~/project/encoded.txt
Conseils : Copiez et collez les commandes pour éviter les erreurs de saisie.
Maintenant, décodons-le :
cat ~/project/encoded.txt | tr 'b-za-a' 'a-z'
Vous devriez voir :
This is a secret message.
Analysons cette commande :
cat ~/project/encoded.txt: Lit le contenu du fichier encodé.|: Envoie la sortie verstr.tr 'b-za-a' 'a-z':- Le premier ensemble 'b-za-a' se compose de :
- 'b-z' : les lettres de b à z
- 'a-a' : la lettre a
- Ainsi, l'ensemble complet est : b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a
- Le second ensemble 'a-z' est : a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
- Cela crée une correspondance où chaque lettre du premier ensemble est remplacée par la lettre correspondante du second :
- b (1er du 1er ensemble) → a (1er du 2e ensemble)
- c (2e du 1er ensemble) → b (2e du 2e ensemble)
- ...
- a (26e du 1er ensemble) → z (26e du 2e ensemble)
- Cela décale effectivement chaque lettre de l'entrée d'une position vers l'arrière dans l'alphabet (déchiffrement de César).
- Note : La commande
treffectue une translation caractère par caractère, donc seules les minuscules sont affectées ici. Les majuscules comme le "T" au début du message restent inchangées car elles ne correspondent à aucun caractère du premier ensemble.
- Le premier ensemble 'b-za-a' se compose de :
Ce type de substitution est une forme très simple de chiffrement appelée chiffre de César. Bien qu'il ne soit pas sécurisé pour un usage réel, c'est un excellent exemple de l'utilisation de tr pour la substitution de caractères.
Utiliser les classes de caractères avec tr
La commande tr prend en charge diverses classes de caractères, qui sont des ensembles prédéfinis. Elles sont très utiles pour des transformations de texte complexes. Utilisons-les dans un scénario pratique.
D'abord, créez un fichier avec un contenu mixte :
echo "User123 logged in at 09:45 AM on 2023-08-15" > ~/project/log_entry.txt
Maintenant, extrayons uniquement les chiffres de cette entrée de journal :
cat ~/project/log_entry.txt | tr -cd '[:digit:]'
Vous devriez voir :
12309452023815
Analysons cette commande :
cat ~/project/log_entry.txt: Lit le contenu du fichier de log.|: Envoie la sortie verstr.tr -cd '[:digit:]':- L'option
-c(complement) complète l'ensemble (signifie "tout ce qui n'est pas dans cet ensemble"). - L'option
-d(delete) supprime les caractères spécifiés. [:digit:]est la classe représentant tous les chiffres (0-9).- Ensemble,
-cd '[:digit:]'signifie "supprimer tous les caractères qui ne sont pas des chiffres".
- L'option
Cette commande est utile pour extraire des données numériques d'un texte mixte, ce qui facilite l'analyse de logs ou le nettoyage de données.
Compresser les répétitions avec tr
La commande tr peut également "compresser" (squeeze) les caractères répétés en une seule occurrence. C'est utile pour nettoyer des données contenant des répétitions inutiles. Créons un fichier avec des espaces superflus.
D'abord, créez un fichier avec des espaces répétés :
echo "This is a test with extra spaces." > ~/project/spaced.txt
Maintenant, utilisons tr pour compresser ces espaces :
cat ~/project/spaced.txt | tr -s ' '
Vous devriez voir :
This is a test with extra spaces.
Analysons cette commande :
cat ~/project/spaced.txt: Lit le contenu du fichier.|: Envoie la sortie verstr.tr -s ' ':- L'option
-s(squeeze-repeats) remplace les séquences de caractères répétés par une seule occurrence. ' 'spécifie que nous voulons compresser les espaces.
- L'option
Cette commande est particulièrement utile pour traiter des données mal formatées ou pour normaliser les espaces blancs dans un fichier texte.
Résumé
Dans cet atelier, nous avons exploré la polyvalence de la commande tr sous Linux. Nous avons appris à :
- Convertir la casse du texte.
- Supprimer des caractères spécifiques.
- Traduire plusieurs caractères simultanément.
- Utiliser les classes de caractères.
- Compresser les répétitions de caractères.
La commande tr est un outil puissant pour la manipulation de texte. Voici quelques options supplémentaires que nous n'avons pas détaillées :
-c: Complète l'ensemble des caractères de la première chaîne (opère sur tout ce qui n'y figure pas).-t: Tronque la première chaîne à la longueur de la seconde.
Pour des tâches de traitement de texte plus avancées, vous pourrez explorer d'autres commandes comme sed et awk dans de futurs ateliers.



