Comment utiliser la commande rev sous Linux



La commande rev sous Linux permet de renverser l’ordre des caractères dans une chaîne de texte. Elle peut être utilisée directement sur du texte saisi ou sur des fichiers. Malgré une apparence simple, sa véritable puissance réside dans son association avec d’autres commandes.

rev fait partie de ces utilitaires Linux qui semblent à première vue un peu déroutants. Sa fonction est unique : inverser une chaîne de caractères. Hormis l’affichage d’une page d’aide succincte (-h) et de sa version (-V), elle ne propose aucune autre option de ligne de commande.

Alors, rev se contente-t-elle d’inverser des chaînes de caractères, sans plus ? Pas d’options ou de variations possibles ? La réponse est nuancée. Il n’y a pas d’options additionnelles, mais rev est loin d’être inutile. Ce tutoriel explore comment l’utiliser de façon combinée pour réaliser des opérations puissantes.

C’est en l’intégrant dans des séquences de commandes plus complexes que rev révèle son véritable intérêt. Elle appartient à un ensemble d’outils (comme tac et yes) qui simplifient certaines tâches. Leur utilité devient plus évidente lorsqu’on constate comment ils rendent l’utilisation d’autres commandes plus efficace.

Utilisation de la commande rev

Utilisée seule, sans paramètre, rev prend en entrée tout texte saisi, l’inverse et l’affiche dans le terminal. Elle continue ce processus jusqu’à ce que vous interrompiez avec Ctrl + C.

rev

Si vous tapez un texte et validez avec Entrée, rev affiche la chaîne inversée, sauf s’il s’agit d’un palindrome, bien entendu.

Transmettre du texte à rev

Il est possible d’utiliser la commande echo pour envoyer du texte vers rev.

echo one two three | rev

rev peut également inverser le contenu d’un fichier texte entier, ligne par ligne. Dans cet exemple, nous avons un fichier nommé « filelist.txt » qui contient une liste de noms de fichiers.

rev filelist.txt

Chaque ligne du fichier est lue, inversée, puis affichée dans le terminal.

Combiner rev avec d’autres commandes

Voici un exemple d’utilisation de rev à deux reprises via un tuyau (pipe) :

Cette commande permet de supprimer le dernier caractère d’une chaîne de texte, ce qui peut être utile pour éliminer la ponctuation. Pour ce faire, nous utilisons la commande cut pour extraire les caractères.

echo 'Remove punctuation.' | rev | cut -c 2- | rev

Décortiquons cette ligne de commande :

echo envoie la chaîne au premier appel de rev.
rev inverse la chaîne et l’envoie à cut.
L’option -c (caractères) indique à cut de renvoyer une séquence de caractères à partir de la chaîne.
L’option 2- indique à cut de renvoyer la plage de caractères allant du deuxième caractère jusqu’à la fin de la ligne. Si une seconde valeur avait été spécifiée (par exemple, 2-5), la plage aurait été du deuxième au cinquième caractère. Sans seconde valeur, l’extraction se fait jusqu’à la fin de la chaîne.
La chaîne inversée (moins son premier caractère) est envoyée à rev, qui l’inverse à nouveau pour restaurer son ordre d’origine.

En supprimant le premier caractère de la chaîne inversée, nous avons en réalité supprimé le dernier caractère de la chaîne initiale. Bien qu’il soit possible d’obtenir le même résultat avec sed ou awk, cette méthode est plus simple en termes de syntaxe.

Extraire le dernier mot

Une approche similaire permet de récupérer le dernier mot d’une ligne.

La commande ressemble à la précédente, utilisant rev à deux reprises. La différence réside dans l’utilisation de cut pour sélectionner les parties du texte.

echo 'Separate the last word' | rev | cut -d' ' -f1 | rev

Voici le détail des commandes :

echo envoie la chaîne au premier appel de rev.
rev inverse la chaîne et l’envoie à cut.
L’option -d ' ' (délimiteur) indique à cut de renvoyer une séquence de caractères délimitée par un espace.
L’option -f1 indique à cut de retourner la première section de la chaîne avant le premier espace.
Le premier mot inversé est envoyé à rev, qui l’inverse à nouveau pour revenir à son ordre initial.

Puisque nous avons extrait le premier mot de la chaîne inversée, nous avons en réalité extrait le dernier mot de la chaîne de départ. Le dernier mot de la phrase était « word », qui est affiché à la sortie.

Manipuler le contenu de fichiers

Supposons que nous ayons un fichier contenant une liste de noms de fichiers, et que ces noms soient entourés de guillemets. Nous souhaitons supprimer ces guillemets.

Affichons le contenu du fichier :

less filelist.txt

Le contenu du fichier est affiché à l’aide de less.

Nous pouvons supprimer la ponctuation aux deux extrémités de chaque ligne avec la commande suivante, qui utilise rev et cut deux fois.

rev filelist.txt | cut -c 2- | rev | cut -c 2-

Les noms de fichiers sont listés sans les guillemets.

La commande fonctionne comme suit :

rev inverse les lignes du fichier et les transmet à cut.
L’option -c (caractères) indique à cut de renvoyer une séquence de caractères de chaque ligne.
L’option 2- indique à cut de renvoyer la plage de caractères allant du deuxième caractère jusqu’à la fin de chaque ligne.
Les chaînes inversées, moins leur premier caractère, sont transmises à rev.
rev inverse à nouveau les chaînes pour qu’elles retrouvent leur ordre original. Elles sont coupées une seconde fois.
L’option -c (caractères) indique à cut de renvoyer une séquence de caractères de chaque chaîne.
L’option 2- indique à cut de renvoyer la plage de caractères allant du deuxième caractère jusqu’à la fin de chaque ligne, ce qui a pour effet d’éliminer le guillemet de début, qui est le premier caractère de chaque ligne.

Utilisation intensive des tuyaux

Voici une commande qui affiche une liste triée de toutes les extensions de fichiers du répertoire actuel. Elle utilise cinq commandes Linux distinctes.

ls | rev | cut -d'.' -f1 | rev | sort | uniq

Le processus est le suivant :

ls liste les fichiers du répertoire courant. Ces noms de fichiers sont envoyés à rev.
rev inverse les noms de fichiers et les transmet à cut.
cut retourne la première partie de chaque nom de fichier jusqu’à un délimiteur. L’option -d '.' indique à cut d’utiliser le point « . » comme délimiteur. La partie des noms de fichiers inversés précédant le premier point correspond aux extensions des fichiers. Ces extensions sont envoyées à rev.
rev inverse les extensions de fichiers pour qu’elles retrouvent leur ordre original. Elles sont ensuite envoyées à sort.
sort trie les extensions de fichier et transmet le résultat à uniq.
uniq affiche une liste unique de chaque type d’extension de fichier. Notez que s’il n’y a pas d’extension de fichier (comme pour les fichiers « makefile » et les répertoires « Help » et « gc_help »), le nom de fichier entier est listé.

Pour une touche finale, ajoutez l’option -c (count) à la commande uniq :

ls | rev | cut -d'.' -f1 | rev | sort | uniq -c

Nous obtenons désormais une liste triée des différents types de fichiers présents dans le répertoire courant, avec le nombre d’occurrences de chaque type.

C’est une commande « one-liner » plutôt ingénieuse !

drawroF og ot drawkcaB gnioG

Parfois, il faut reculer pour mieux avancer. Et c’est souvent en équipe que l’on avance le plus vite.

Ajoutez rev à votre répertoire de commandes indispensables et vous l’utiliserez bientôt pour simplifier des séquences de commandes qui semblaient complexes.