Chaque passionné de Linux doit connaître Sed et Awk. Voici pourquoi...
sed et awk sont les outils préférés de chaque utilisateur expérimenté de Linux. Mais que sont-ils ? Et comment les utilisez-vous pour traiter des fichiers texte ?
Deux des utilitaires Linux les plus sous-estimés sont sed et awk. Bien qu'ils puissent sembler un peu ésotériques, si vous devez un jour apporter des modifications répétitives à de grands morceaux de code ou de texte, ou si vous devez un jour analyser du texte, sed et awk sont précieux.
Alors, que 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 de modifier des corps ou des flux de texte de manière programmatique, à travers un langage de programmation compact et simple, mais complet au sens de 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 devait écrire un script sed qui remplaçait le mot "bière" par "soda", et qu'il transmettait un fichier texte contenant l'intégralité des paroles de "99 Bouteilles de Bière sur le Mur", cela passerait par ce fichier ligne par ligne, et imprimerait "99 Bouteilles de Soda sur le Mur", et ainsi de suite.
Le script sed le plus basique est "Bonjour le monde." Ici, nous utilisons la commande echo, qui ne fait qu'afficher des chaînes, pour imprimer "Bonjour le monde." Mais nous le transmettons à sed et lui disons de remplacer "monde" par "Dave". Choses explicites.
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 Reddit hilarant, prenons les paroles de "Take On Me" de A-ha, et remplaçons chaque instance de "I", "Me" et "My" par Greg.
Tout d'abord, mettez les paroles de la chanson dans un fichier texte appelé tom.txt. Ensuite, ouvrez 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 pourriez remarquer des répétitions dans l'exemple ci-dessus (comme s/me/Greg/ et s/Me/Greg/). C'est parce que certaines versions de sed, comme celle qui est fournie avec macOS, ne prennent pas en charge la correspondance sans tenir compte de la casse. Par conséquent, nous devons écrire deux instructions pour chaque mot afin que sed reconnaisse les versions en majuscules et en minuscules.
Cela ne fonctionnera pas parfaitement, comme si vous aviez remplacé chaque instance de "je", "me" et "mon" manuellement. N'oubliez pas que nous utilisons ceci simplement comme un exercice pour démontrer comment vous pouvez regrouper les instructions sed dans un seul script, puis les exécuter avec une seule commande.
Ensuite, nous devons invoquer le fichier. Pour cela, exécutez cette commande.
cat tom.txt | sed -f greg.sedRalentissons et examinons ce que cela fait. Vous avez peut-être remarqué que nous n'utilisons pas echo ici. Nous utilisons cat. C'est parce que alors que cat affichera tout le contenu du fichier, echo n'affichera que le nom du fichier. Vous avez peut-être aussi remarqué que nous exécutons sed avec l'option "-f". Cela lui indique d'ouvrir le script en tant que fichier.
Le résultat final est ceci :
Il convient également de noter que sed prend en charge les expressions régulières (REGEX). Celles-ci vous permettent de définir des motifs dans le texte, en utilisant une syntaxe spéciale et compliquée.
Voici un exemple de comment cela pourrait fonctionner. Nous allons prendre les paroles de la chanson mentionnée ci-dessus, mais utiliser des expressions régulières pour imprimer chaque ligne qui ne commence pas par "Prendre".
cat tom.txt | sed /^Take/dsed est, bien sûr, incroyablement utile. Mais il est encore plus puissant lorsqu'il est combiné avec awk.
Qu'est-ce que AWK ?
AWK, comme sed, est un langage de programmation qui traite de grandes quantités de texte. Mais tandis que les gens utilisent sed pour traiter et modifier du texte, les gens utilisent principalement AWK comme un outil d'analyse et de reporting.
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 en ligne de commande.
AWK fonctionne en lisant un fichier texte ou un flux d'entrée ligne par ligne. Chaque ligne est scannée pour voir si elle correspond à un motif 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 totalement distinctes. AWK ressemble plus à certains langages de programmation généralistes, comme C, Python et Bash. Il a des éléments comme des fonctions et une approche plus proche de C pour des concepts comme l'itération et les variables. En bref, AWK ressemble davantage à un langage de programmation.
Alors, essayons. En utilisant les paroles de « Take On Me », nous allons imprimer toutes les lignes qui font plus de 20 caractères.
awk ' length($0) > 20 ' tom.txtCombiner les deux
awk et sed sont tous deux incroyablement puissants lorsqu'ils sont combinés. Vous pouvez le faire en utilisant des pipes 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 enlever toutes les lignes qui commencent par "Take." Ensemble, cela ressemble à ceci :
awk 'length($0)>20' tom.txt | sed /^Take/dEt produit ceci :
Le pouvoir de sed et awk
Il y a seulement tant de choses que vous pouvez expliquer dans un seul article, mais espérons que vous avez maintenant une idée de la puissance incommensurable de sed et awk. En termes simples, ce sont des puissances de traitement de texte.
Alors, pourquoi devriez-vous vous en soucier ? Eh bien, en dehors du fait que vous ne savez jamais quand vous aurez besoin d'apporter des modifications prévisibles et répétitives à un document texte, sed et awk sont excellents pour analyser les fichiers journaux. Cela est particulièrement utile lorsque vous essayez de déboguer un problème sur votre serveur LAMP ou que vous regardez vos journaux d'accès pour voir si votre serveur a été piraté.





