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

  • Michael Cain
  • 0
  • 3452
  • 639
Publicité

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 élémentaire 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 des instructions Sed dans des fichiers si vous devez effectuer des modifications plus complexes. Inspiré par ce fil hilarant de Reddit, je vais prendre les paroles de A-Ha Prendre sur moi, et remplacer chaque instance de “je”, “Moi”, et “ma”, avec Greg.

Premièrement, 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 après 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, mais je…, mais Nano nano contre vim: Éditeurs de texte dans les terminaux Comparé à nano vs vim: Comparaison entre les éditeurs de texte de terminaux Bien que Linux soit devenu assez facile à utiliser pour presque tout le monde sans avoir à utiliser le Terminal, nous sommes certains à l’utiliser régulièrement ou sommes curieux de savoir comment on peut contrôler… et Gedit gedit: One Des éditeurs de texte brut les plus remplis de fonctionnalités [Linux & Windows] gedit: L'un des éditeurs de texte brut les plus remplis de fonctionnalités [Linux & Windows] Lorsque vous pensez aux éditeurs de texte brut, la première chose qui peut vous venir à l'esprit est Windows "Application Bloc-notes. Il fait exactement ce que sa description de poste st ates - les caractéristiques simples d’un texte brut… 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. En conséquence, 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 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 / ^ prendre / 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 Il 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? , comme C, Python et Bash. Il comporte des fonctions telles que les 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 de lire la partie 1 avant d’aborder cette question, où j’ai expliqué la…). 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 / ^ prendre / d

Et produit ceci:

Maintenant, retournons ça. 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 déboguer un problème sur votre serveur LAMP Signed Up for SSH only Web Hosting? 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. ou en consultant vos journaux d'accès pour voir 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? Faites-moi savoir dans les commentaires ci-dessous, et nous allons discuter.




Personne n'a encore commenté ce post.

De la technologie moderne, simple et abordable.
Votre guide dans le monde de la technologie moderne. Apprenez à utiliser les technologies et les gadgets qui nous entourent chaque jour et à découvrir des choses intéressantes sur Internet.