Chaque geek Linux doit savoir Sed et Awk. Voici pourquoi…

Chaque geek Linux doit savoir Sed et Awk. Voici pourquoi… / Linux

Sed et Awk sont deux des utilitaires Linux les moins bien compris par les criminels. Même s’ils peuvent certes 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 un texte, Sed et Awk sont inestimables..

Alors, ils sont quoi? Comment sont-ils utilisés? Et comment, quand 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 pionnier de l'informatique légendaire Lee E. McMahon.

Le nom signifie éditeur de flux, et c'est un peu ce qu'il fait. Il vous permet d'éditer des corps ou des flux de texte par programmation, à travers un langage de programmation compact et simple, mais complet, de Turing.

La façon dont cela fonctionne 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 remplace le mot “Bière” avec “un soda”, puis passé dans un fichier texte contenant l'intégralité des paroles “99 bouteilles de bière sur le mur”, il passerait par ce fichier ligne par ligne et imprimerait “99 bouteilles de soda sur le mur”, etc.

Le script Sed le plus fondamental est celui de Hello World. Ici, nous utilisons l’utilitaire Unix Echo, qui produit simplement des chaînes, pour imprimer “Bonjour le monde”. Mais nous transmettons cela à Sed et lui demandons de remplacer “Monde” avec”Dave”. Trucs explicites.

echo "Hello World" | sed s / world / Dave

Vous pouvez également combiner les instructions Sed dans des fichiers si vous devez effectuer des modifications plus complexes. Inspiré par ce fil hilarante de Reddit, je vais prendre les paroles de A-Ha Prendre sur moi, et remplacer chaque instance de “je”, “Moi”, et “ma”, avec Greg.

Tout d'abord, je vais mettre les paroles de la chanson dans un fichier texte appelé tom.txt. Ensuite, je vais ouvrir mon éditeur de texte préféré (mon préféré est Vim Les 7 meilleures raisons de donner une chance à l’éditeur de texte Vim Les 7 meilleures raisons de donner une chance à l’éditeur de texte Vim Pendant des années, j’ai essayé un éditeur de texte un autre. Vous l'appelez, je l'ai essayé. J'ai utilisé chacun de ces éditeurs pendant plus de deux mois comme éditeur principal au quotidien.… En savoir plus, mais Nano nano contre vim: Éditeurs de texte en mode terminal Comparé nano vs vim: Éditeurs de texte de terminaux comparés Bien que Linux soit devenu assez facile à utiliser pour quasiment tout le monde sans avoir à utiliser le terminal, nous sommes quelques-uns à l’utiliser régulièrement ou curieux de savoir comment on peut contrôler… Read More and Gedit gedit: l'un des éditeurs de texte brut les plus riches en fonctionnalités [Linux & Windows] gedit: l'un des éditeurs de texte brut les plus riches en fonctionnalités [Linux & Windows] Lorsque vous pensez aux éditeurs de texte brut, la première chose qui peut apparaître votre tête est l'application Bloc-notes de Windows. Elle fait exactement ce que sa états de description de travail - caractéristiques simples pour un texte brut… Lire la suite sont deux excellents choix), et ajoutez les lignes suivantes. Assurez-vous que le fichier que vous créez se termine par .sed.

Vous remarquerez peut-être que dans l'exemple ci-dessus, je me suis répété (par exemple, s / me / Greg / et s / Me / Greg /). En effet, certaines versions de Sed, comme celle livrée avec Mac OS X, ne pas prendre en charge la correspondance insensible à la casse. Par conséquent, nous devons écrire deux instructions Sed pour chaque mot, afin de reconnaître la version capitalisée et non capitalisée..

Cela ne fonctionnera pas parfaitement, comme si vous avez remplacé chaque instance de “je”, “Moi”, et “ma” par la main. N'oubliez pas que nous utilisons cet exercice uniquement pour montrer comment regrouper des instructions Sed dans un script, puis les exécuter avec une seule commande..

Ensuite, nous devons appeler le fichier. Pour ce faire, nous lançons cette commande.

chat tom.txt | sed -f greg.sed

Ralentissons et regardons ce que cela fait. Les lecteurs aux yeux d'aigle auront remarqué que nous sommes ne pas en utilisant Echo ici. Nous utilisons Cat. En effet, bien que Cat imprime l'intégralité du contenu du fichier, écho n'imprimera que le nom du fichier. Vous aurez également remarqué que nous courons Sed avec le “-F” drapeau. Cela lui dit 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). 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 la chanson susmentionnée, mais utilisez regex pour imprimer chaque ligne ne pas Commencer avec “Prendre”.

chat 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 que Awk?

Awk, comme Sed, est un langage de programmation conçu pour traiter de gros corps de texte. Mais si Sed est utilisé pour traiter et modifier du texte, Awk est principalement utilisé comme outil de une analyse et rapport.

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 le programme Est-ce que, mais plutôt les noms de famille de chacun des auteurs - Alfred Aho, Peter Weinberger et Brian Kernaghan.

Awk fonctionne en lisant un fichier texte ou un flux d’entrée ligne par ligne. Chaque ligne est analysée pour voir si elle correspond à un modèle prédéfini. Si une correspondance est trouvée, une action est effectuée.

Cependant, même si Sed et Awk peuvent partager des objectifs similaires, ce sont deux langues complètement différentes, avec deux philosophies de conception complètement différentes. Comment choisir un langage de programmation pour apprendre aujourd'hui et obtenir un excellent travail en 2 ans Comment choisir un langage de programmation pour apprendre aujourd'hui et obtenir un excellent travail en 2 ans Cela peut prendre des années de travail devenir un très bon programmeur; Y a-t-il un moyen de choisir la bonne langue pour commencer à partir d'aujourd'hui, afin d'être embauché demain? Lire la suite, comme C, Python et Bash. Il comporte des fonctions telles que des fonctions et une approche plus semblable au C, comme l'itération et les variables (James Bruce a expliqué le fonctionnement de l'itération. Principes de base absolus de la programmation pour les débutants (partie 2) Principes de base absolus de la programmation pour les débutants (partie 2) En partie Deux de nos guides de programmation pour débutants absolus, je couvrirai les bases des fonctions, les valeurs renvoyées, les boucles et les conditions. Assurez-vous d'avoir lu la partie 1 avant d'aborder cette question, où… En savoir plus). En termes simples, cela 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 'longueur ($ 0)> 80' tom.txt 

Le prochain exemple que j'ai sans gêne cribbed de la documentation officielle Awk. Mais c’est un bel exemple du potentiel de ce langage puissant mais minuscule. C'est aussi une excellente démonstration de la façon dont des choses comme l'itération et les variables y travaillent. Tout d’abord, créez un fichier appelé “WordCount.awk”, et ajouter les lignes suivantes.

pour (i = 1; i <= NF; i++) freq[$i]++ 
END pour (mot en freq) printf "% s \ t% d \ n", mot, freq [mot]

Enregistrez-le, puis exécutez-le avec la commande suivante.

awk -f WordCount.awk tom.txt


Cool, non? Vous remarquerez probablement qu'ils ne sont dans aucun ordre. Vous pouvez triez les résultats à l'aide de l'utilitaire de tri Unix. Mais nous laisserons cela pour un autre jour. Nous allons garder les choses simples.

Combinant 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 effacer toutes les lignes qui commencent par “Prendre”. Ensemble, tout ressemble à ceci:

awk 'longueur ($ 0)> 20' tom.txt | sed / ^ Take / d

Et produit ceci:

Maintenant, retournons ça autour. Nous allons commencer par supprimer toutes les lignes commençant par Take, puis les rediriger vers Awk, où nous compterons le nombre de fois que chaque mot apparaît. Cela ressemble un peu à ceci:

chat tom.txt | sed / ^ prendre / d | awk -f WordCount.awk

Le pouvoir de Sed et Awk

Vous ne pouvez expliquer que trop de choses dans un seul article. Mais j'espère avoir illustré à quel point Sed et Awk sont incroyablement puissants.. En termes simples, ils sont une centrale de traitement de texte.

Alors, pourquoi devriez-vous vous en soucier? 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 l’analyse des fichiers journaux. Ceci est particulièrement utile lorsque vous essayez de résoudre un problème sur votre serveur LAMP. Vous êtes inscrit pour l'hébergement Web SSH? Ne vous inquiétez pas - installez facilement n'importe quel logiciel Web ayant souscrit un hébergement Web réservé à SSH? Ne vous inquiétez pas - installez facilement n'importe quel logiciel Web Vous ne savez pas tout du tout comment utiliser Linux via sa puissante ligne de commande? Ne vous inquiétez plus. Lire la suite ou consulter vos journaux d'accès pour savoir si votre serveur a été piraté.

Avez-vous trouvé une utilisation intéressante pour Sed et Awk? Y a-t-il d'autres utilitaires Linux que vous jugez sous-estimés? Laissez-moi savoir dans les commentaires ci-dessous, et nous allons discuter.

En savoir plus sur: Terminal, Editeur de texte.