Deux des utilitaires Linux les moins appréciés sont sed et awk. Bien qu’ils puissent sembler un peu obscurs, si vous devez apporter des modifications répétitives à de gros morceaux de code ou de texte, ou si vous devez analyser du texte, sed et awk sont inestimables.
Alors, quels sont-ils? Comment sont-ils utilisés ? Et comment, lorsqu’ils sont combinés, facilitent-ils le traitement du texte ?
Qu’est-ce que sed ?
sed a été développé en 1971 aux Bell Labs par le légendaire pionnier de l’informatique Lee E. McMahon.
Le nom signifie « éditeur de flux ». sed vous permet d’éditer des corps ou des flux de texte par programmation, via un langage de programmation compact et simple, mais complet pour Turing.
Le fonctionnement de sed est simple : il lit le texte ligne par ligne dans un tampon. Pour chaque ligne, il exécutera les instructions prédéfinies, le cas échéant.
Par exemple, si quelqu’un écrivait un script sed qui remplaçait le mot « bière » par « soda », puis passait dans un fichier texte contenant les paroles entières de « 99 bouteilles de bière sur le mur », il passerait par ce fichier ligne par ligne et imprimez « 99 bouteilles de soda sur le mur », et ainsi de suite.
Le script sed le plus basique est « Hello World ». Ici, on utilise le écho commande, qui génère simplement des chaînes, pour imprimer « Hello World ». Mais nous dirigeons cela vers sed et lui disons de remplacer « World » par « Dave ». Des trucs qui se passent d’explications.
echo "Hello World" | sed s/World/Dave/
Vous pouvez également combiner des instructions sed dans des fichiers si vous devez effectuer des modifications plus compliquées. Inspiré par ce fil hilarant de Reddit, prenons les paroles de « Take On Me » d’A-ha et remplaçons chaque occurrence de « I », « Me » et « My », par Greg.
Tout d’abord, placez les paroles de la chanson dans un fichier texte appelé tom.txt. Ouvrez ensuite votre éditeur de texte préféré et ajoutez les lignes suivantes. Assurez-vous que le fichier que vous créez se termine par .sed.
s/I/Greg/
s/Me/Greg/
s/me/Greg/
s/My/Greg/
s/my/Greg/
Vous remarquerez peut-être des répétitions dans l’exemple ci-dessus (comme s/me/Greg/ et s/Me/Greg/). En effet, certaines versions de sed, comme celle livrée avec macOS, ne prennent pas en charge la correspondance insensible à la casse. En conséquence, nous devons écrire deux instructions pour chaque mot pour que sed reconnaisse les versions en majuscules et non majuscules.
Cela ne fonctionnera pas parfaitement, comme si vous aviez remplacé chaque occurrence de « I », « Me » et « My » à la main. N’oubliez pas que nous utilisons simplement cela comme un exercice pour montrer comment vous pouvez regrouper des instructions sed dans un seul script, puis les exécuter avec une seule commande.
Ensuite, nous devons invoquer le fichier. Pour ce faire, exécutez cette commande.
cat tom.txt | sed -f greg.sed
Ralentissons et regardons ce que cela fait. Vous avez peut-être remarqué que nous n’utilisons pas echo ici. Nous utilisons chat. En effet, alors que cat imprimera tout le contenu du fichier, echo n’imprimera que le nom du fichier. Vous avez peut-être également remarqué que nous exécutons sed avec le drapeau « -f ». Cela lui indique d’ouvrir le script en tant que fichier.
Le résultat final est celui-ci :
Il convient également de noter que sed prend en charge les expressions régulières (REGEX). Ceux-ci vous permettent de définir des modèles dans le texte, en utilisant une syntaxe spéciale et compliquée.
Voici un exemple de la façon dont cela pourrait fonctionner. Nous allons prendre les paroles de chansons susmentionnées, mais utiliser regex pour imprimer chaque ligne qui ne commence pas par « Take ».
cat tom.txt | sed /^Take/d
sed est, bien sûr, incroyablement utile. Mais c’est encore plus puissant lorsqu’il est combiné avec awk.
Qu’est-ce qu’AWK ?
AWK, comme sed, est un langage de programmation qui traite de grands corps de texte. Mais alors que les gens utilisent sed pour traiter et modifier du texte, ils utilisent principalement AWK comme outil d’analyse et de création de rapports.
Comme sed, AWK a été développé pour la première fois aux Bell Labs dans les années 1970. Son nom ne vient pas de ce que fait le programme, mais plutôt des noms de famille de chacun des auteurs : Alfred Aho, Peter Weinberger et Brian Kernighan. En majuscules, AWK fait référence au langage de programmation lui-même. En minuscules, awk fait référence à l’outil de ligne de commande.
AWK fonctionne en lisant un fichier texte ou un flux d’entrée une ligne à la fois. Chaque ligne est scannée pour voir si elle correspond à un modèle prédéfini. Si une correspondance est trouvée, une action est effectuée.
Mais bien que sed et AWK puissent partager des objectifs similaires, ce sont deux langages complètement différents, avec deux philosophies de conception complètement différentes. AWK ressemble plus à certains langages à usage général, comme C, Python et Bash. Il a des choses comme des fonctions et une approche plus proche du C pour des choses comme l’itération et les variables. En termes simples, AWK ressemble plus à un langage de programmation.
Alors, essayons. En utilisant les paroles de « Take On Me », nous allons imprimer toutes les lignes de plus de 20 caractères.
awk ' length($0) > 20 ' tom.txt
Combiner les deux
awk et sed sont tous deux incroyablement puissants lorsqu’ils sont combinés. Vous pouvez le faire en utilisant des tubes Unix. Ce sont les « | » bits entre les commandes.
Essayons ceci : nous allons lister toutes les lignes de « Take On Me » qui ont plus de 20 caractères, en utilisant awk. Ensuite, nous allons supprimer toutes les lignes qui commencent par « Take ». Ensemble, tout ressemble à ceci :
awk 'length($0)>20' tom.txt | sed /^Take/d
Et produit ceci :
Le pouvoir de sed et awk
Vous ne pouvez pas expliquer beaucoup de choses dans un seul article, mais j’espère que vous avez maintenant une idée de la puissance incommensurable de sed et awk. En termes simples, ils sont une centrale de traitement de texte.
Alors, pourquoi devriez-vous vous en soucier ? Eh bien, outre le fait que vous ne savez jamais quand vous devez apporter des modifications prévisibles et répétitives à un document texte, sed et awk sont parfaits pour analyser les fichiers journaux. Ceci est particulièrement pratique lorsque vous essayez de déboguer un problème sur votre serveur LAMP ou que vous consultez vos journaux d’accès pour voir si votre serveur a été piraté.
Lire la suite
A propos de l’auteur