Chaque geek linux a besoin de savoir sed et awk. Voici pourquoi…

Video: Using AWK to format output

Deux des services publics les plus criminellement sous-estimé Linux sont Sed et Awk. Bien que certes ils peuvent sembler un peu obscur, si jamais vous avez à faire des changements répétitifs à de gros morceaux de code ou d`un texte, ou si vous avez jamais à analyser un texte, Sed et Awk sont inestimables.

Alors, quels sont-ils? Comment sont-ils utilisés? Et comment, lorsqu`ils sont combinés ensemble, font-ils plus facilement traiter le texte?

Qu`est-ce que Sed?

Sed a été développé en 1971 chez Bell Labs, par le légendaire pionnier de l`informatique 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 programme, à travers un compact et simple, mais Turing-complet langage de programmation.

La façon dont cela fonctionne est simple: il lit le texte, ligne par ligne dans un tampon. Pour chaque ligne, il va exécuter les instructions prédéfinies, le cas échéant.

Par exemple, si quelqu`un était d`écrire un script Sed qui a remplacé le mot « bière » par « soda », puis passé dans un fichier texte qui contient l`ensemble des paroles de « 99 bouteilles de bière sur le mur », il irait grâce à ce fichier sur une ligne par ligne, et d`imprimer « 99 bouteilles de Soda sur le mur », et ainsi de suite.

Video: Deepin Os 15.3 (Test et review)

Le script Sed plus basic est Bonjour tout le monde. Ici, nous utilisons l`utilitaire Unix Echo, qui chaînes de sortie uniquement, pour imprimer « Bonjour tout le monde ». Mais nous conduit à ce Sed, et lui dire de remplacer « monde » par » Dave ». trucs Explicite.

écho "Bonjour le monde" | sed s / monde / Dave

sedawk-dave

Vous pouvez également combiner des instructions Sed dans des fichiers, si vous devez faire une édition plus compliquée. Inspiré par ce hilarant fil Reddit, je vais prendre les paroles de A-Ha de Prendre sur moi, et remplacer chaque instance de « I », « Moi » et « Mon », avec Greg.

Tout d`abord, je vais mettre les paroles de la chanson dans un fichier texte appelé tom.txt. Alors, je vais ouvrir mon éditeur de texte préféré (mon favori est ViM, mais nano et gedit sont tous deux excellents choix), et ajoutez les lignes suivantes. Vérifiez que le fichier que vous créez se termine par .sed.Le Top 7 raisons de donner VIM Text Editor A ChanceLe Top 7 raisons de donner VIM Text Editor A ChancePendant des années, je l`ai essayé un éditeur de texte après l`autre. Vous le nom, je l`ai essayé. Je chacun de ces éditeurs pour plus de deux mois que mon premier jour à jour éditeur. D`une certaine façon, je ...Lire la suite

sed-greg-sed

Vous remarquerez peut-être que dans l`exemple ci-dessus, je me suis répété (par exemple s / me / Greg / s et / Me / Greg /). En effet, certaines versions de Sed, comme celui qui est livré avec Mac OS X, faire ne pas support correspondant insensible à la casse. En conséquence, nous devons écrire deux instructions Sed pour chaque mot, afin qu`il reconnaisse la version capitalisée et sans majuscule.

Cela ne fonctionnera pas parfaitement, comme si vous avez remplacé chaque instance de « I », « Moi » et « Mon » à la main. Rappelez-vous, nous sommes juste utiliser cela comme un exercice pour montrer comment vous pouvez regrouper des instructions Sed dans un script, puis les exécuter avec une seule commande.

Ensuite, il faut invoquer le fichier. Pour ce faire, nous courons cette commande.

cat tom.txt | sed -f greg.sed

Laissez Ralentissons et regardons ce que cela fait. lecteurs d`aigle aux yeux auront remarqué que nous sommes le ne pas à l`aide d`écho ici. Nous utilisons Cat. En effet, alors que Cat va imprimer le contenu du fichier, l`écho n`affichera le nom du fichier. Vous aurez également remarqué que nous sommes en cours d`exécution Sed avec le drapeau « -f ». Cela lui dit d`ouvrir le script dans un fichier.

Le résultat final est la suivante.

sed-greg-scriptum

Il est également intéressant de noter que Sed supporte les expressions régulières (RegEx). Celles-ci vous permettent de définir des modèles de texte, en utilisant une syntaxe particulière et complexe.

Voici un exemple de la façon dont cela pourrait fonctionner. Nous allons prendre les paroles de chansons ci-dessus, mais utiliser regex pour imprimer chaque ligne ne pas commencer par « Take ».

cat tom.txt | sed / ^ Prenez / j

sed-regex-take

Sed est, bien sûr, très 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 conçu pour faire face aux grands corps de texte. Mais alors que Sed est utilisé pour traiter et modifier le texte, awk est surtout utilisé comme outil de une analyse et rapports.

Comme Sed, Awk a été développé chez 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 chacun des auteurs - Alfred Aho, Peter Weinberger, et Brian Kernaghan.

Awk fonctionne en lisant un fichier texte ou un flux d`une ligne d`entrée à la fois. Chaque ligne est analysé afin de déterminer si elle correspond à un modèle prédéfini. Si une correspondance est trouvée, une action est effectuée.

Mais alors que Sed et Awk peuvent partager des objectifs similaires, ils sont deux langues totalement différentes, avec deux philosophies de conception complètement différentes. Awk ressemble de plus près quelques-uns générales langues d`usage, comme C, Python et Bash. Il a des choses comme des fonctions, et une approche plus comme C à des choses comme l`itération et les variables (James Bruce a expliqué comment itération fonctionne). Plus simplement, il se sent plus comme un langage de programmation.Comment choisir un langage de programmation Pour apprendre aujourd`hui & Obtenez un excellent travail en 2 ansComment choisir un langage de programmation Pour apprendre aujourd`hui & Obtenez un excellent travail en 2 ansIl peut prendre des années de travail acharné pour devenir vraiment bon Programmeur est donc là un moyen de choisir la langue de commencer à partir d`aujourd`hui, afin de se faire embaucher demain?Lire la suite

Donc, nous allons essayer. En utilisant les paroles de Take On Me, nous allons imprimer toutes les lignes qui sont plus de 20 caractères.

longueur `awk (0 $) gt; 80 `tom.txtawk longueur

L`exemple suivant que j`ai sans gêne chipé de la documentation Awk officielle. Mais il est un excellent exemple du potentiel de ce puissant langage encore tout petit. Il est aussi une grande démonstration de la façon dont les choses comme itération et les variables travaillent. Tout d`abord, créez un fichier appelé « WordCount.awk », et ajoutez les lignes suivantes.

Video: awk command examples in Ubuntu

{For (i = 1 i lt; = i ++ NF-) Fréq [$ i] ++}
FIN {for (mot fréq) printf "% S t% d n", Mot, Fréq [mot]}

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

awk -f WordCount.awk tom.txt

awk-wordcount
Cool, non? Vous remarquerez sans doute qu`ils ne sont pas dans un ordre quelconque. Toi pouvez trier les résultats en utilisant l`utilitaire de tri Unix. Mais nous allons laisser cela pour un autre jour. Nous allons garder les choses simples.

La combinaison des deux

Sed et awk sont à la fois incroyablement puissant lorsqu`il est combiné. Vous pouvez le faire en utilisant des tuyaux Unix. Ce sont les | bits entre les commandes « ».

Essayons ceci: Nous allons énumérer toutes les lignes Take On Me qui ont plus de 20 caractères, en utilisant awk. Ensuite, nous allons dépouiller toutes les lignes qui commencent par "Prendre". , Tout semble ensemble comme ceci:

awk `longueur (0 $) gt; 20` tom.txt | sed / ^ Prenez / j

Et produit ceci:

awk-longueur-sed

Maintenant, nous allons flip autour. Nous allons commencer par supprimer toutes les lignes qui commencent par prendre et puis les tuyaux à awk, où nous allons compter combien de fois chaque mot apparaît. Il ressemble un peu à ceci:

cat tom.txt | sed / ^ Prenez / j | awk -f WordCount.awk

awk-wordcount-sed

La puissance de Sed et Awk

Il y a seulement tellement que vous pouvez expliquer dans un seul article. Mais je l`espère, je l`ai montré comment incomparablement puissant Sed et Awk sont. Autrement dit, ils sont une puissance de traitement de texte.

Video: Популярные видео – AWK и grep

Alors, pourquoi devriez-vous prendre soin? Eh bien, outre le fait que vous ne savez jamais quand vous devez apporter des modifications répétitives prévisibles, à un document texte, Sed et Awk sont parfaits pour l`analyse syntaxique des fichiers journaux. Cela est particulièrement pratique lorsque vous essayez de déboguer un problème dans votre serveur LAMP, ou regarder vos journaux d`accès pour voir si votre serveur a été piraté.Signé pour l`hébergement Web SSH uniquement? Ne vous inquiétez pas - facilement installer un logiciel WebSigné pour l`hébergement Web SSH uniquement? Ne vous inquiétez pas - facilement installer un logiciel WebJe ne sais pas la première chose à propos d`exploitation Linux à travers sa ligne de commande puissante? Vous inquiétez pas plus.Lire la suite

Avez-vous trouvé une utilisation intéressante pour Sed et Awk? Y a-t-il d`autres utilitaires Linux vous vous sentez sont sous-estimés? Faites-moi savoir dans les commentaires ci-dessous, et nous causerons.

Articles connexes