Fiecare Geek Linux trebuie să știe Sed și Awk. Iata de ce…

Fiecare Geek Linux trebuie să știe Sed și Awk. Iata de ce… / Linux

Două dintre cele mai criminale sub-apreciate utilități Linux sunt Sed și Awk. Desigur, ele pot părea un pic cam arcane, dacă vreți să faceți modificări repetitive în bucăți mari de cod sau text sau dacă vreți să analizați vreun text, Sed și Awk sunt neprețuite.

Deci, ce sunt ei? Cum se utilizează? Și cum, atunci când sunt combinate, fac mai ușoară procesarea textului?

Ce este Sed?

Sed a fost dezvoltat în 1971 la Bell Labs, de pionierul legendar al calculatoarelor Lee E. McMahon.

Numele se referă la editor de fluxuri, și asta e ceea ce face. Acesta vă permite să editați corpuri sau fluxuri de text programatică, printr-un limbaj de programare compact și simplu, dar Turing-complet.

Modul în care funcționează este simplu: citește text, line-by-line într-un tampon. Pentru fiecare linie, va executa instrucțiunile predefinite, dacă este cazul.

De exemplu, dacă cineva ar trebui să scrie un script Sed care înlocuiește cuvântul “bere” cu “sifon”, și apoi trecut într-un fișier text care conținea întreg versurile “99 Butelii de bere pe perete”, ar trece prin acel dosar pe linie liniară și va fi tipărit “99 Sticle de sifon pe perete”, si asa mai departe.

Scriptul cel mai de bază Sed este o carte Hello World. Aici folosim utilitarul Unix Echo, care produce doar șiruri de caractere, pentru imprimare “Salut Lume”. Dar îl conducem pe Sed și îi spunem să o înlocuiască “Lume” cu”Dave”. Lucru auto-explicativ.

ecoul "Hello World" sed / lume / Dave

Puteți, de asemenea, să combinați instrucțiunile Sed în fișiere, dacă trebuie să faceți o editare mai complicată. Inspirat de acest thread hilar Reddit, voi lua versurile în A-Ha's Luați-mă pe mine, și înlocuiți fiecare instanță de “eu”, “Pe mine”, și “Mele”, cu Greg.

În primul rând, voi pune versurile cântecului într-un fișier text numit tom.txt. Apoi, voi deschide editorul meu de text preferat (preferatul meu este Vim Top 7 motive pentru a da editorul de text Vim O șansă Top 7 motive pentru a da Editorul de text Vim O șansă De ani de zile, am încercat un editor de text după un alt nume pe care il numiti, am incercat sa-l folosesc pe fiecare dintre acesti editori de peste doua luni ca editor principal de zi cu zi. În comparație cu nano vs. vim: Terminale Text Editors Comparat Deși Linux a devenit destul de ușor pentru practic oricine de a utiliza fără a fi vreodată să utilizeze Terminalul, există unii dintre noi care îl folosesc în mod regulat sau sunt curioși cum se poate controla ... Citeste mai mult Gedit Gedit: unul dintre editorii de text simplificați [Linux & Windows] gedit: Unul dintre editorii de text simplu [Linux & Windows] Când vă gândiți la editorii de text simplu, primul lucru care ar putea apărea în capul tău este aplicația Windows Notepad starea descrierii postului - caracteristici simple pentru un text simplu ... Citiți mai multe sunt ambele opțiuni excelente) și adăugați următoarele linii. Asigurați-vă că fișierul pe care îl creați se termină .sed.

S-ar putea să observați că în exemplul de mai sus m-am repetat (de exemplu, s / me / Greg / și s / Me / Greg). Acest lucru se datorează faptului că unele versiuni ale lui Sed, precum cea pe care o vând cu Mac OS X, o fac nu susține potrivirea insensibilă a caracterelor. Ca rezultat, trebuie să scriem câte două instrucțiuni Sed pentru fiecare cuvânt, deci recunoaște versiunea capitalizată și necapitalizată.

Acest lucru nu va funcționa perfect, ca și cum ați înlocuit fiecare instanță “eu”, “Pe mine”, și “Mele” de mana. Rețineți că folosim doar acest lucru ca un exercițiu pentru a demonstra modul în care puteți grupa instrucțiunile Sed într-un singur script și apoi executați-le cu o singură comandă.

Apoi, trebuie să invocăm dosarul. Pentru a face acest lucru, executăm această comandă.

cat tom.txt | sed -f greg.sed

Să încetinim și să vedem ce face asta. Eagle-eyed cititorii vor fi observat suntem nu folosind Echo aici. Folosim Cat. Asta pentru ca in timp ce Cat va imprima intregul continut al fisierului, ecoul va imprima doar numele fisierului. De asemenea, ați observat că rulați Sed cu “-f” steag. Acest lucru îi spune să deschidă scriptul ca fișier.

Rezultatul final este acesta.

De asemenea, merită remarcat faptul că Sed susține expresii regulate (REGEX). Acestea vă permit să definiți modele în text, utilizând o sintaxă specială și complicată.

Iată un exemplu în care ar putea funcționa. Vom lua versurile cântecului menționat mai sus, dar folosiți regex pentru a imprima fiecare linie nu începe cu “Lua”.

cat tom.txt | sed / ^ Take / d

Sed este, desigur, incredibil de util. Dar este chiar mai puternic atunci când este combinat cu Awk.

Ce este Awk?

Awk, ca Sed, este un limbaj de programare conceput pentru a face față unor corpuri mari de text. Dar, în timp ce Sed este folosit pentru a procesa și modifica textul, Awk este cel mai folosit ca instrument pentru analiză și raportare.

Ca și Sed, Awk a fost dezvoltat pentru prima oară la Bell Labs în anii 1970. Numele ei nu vine din programul face, ci mai degrabă numele de familie al fiecăruia dintre autori - Alfred Aho, Peter Weinberger și Brian Kernaghan.

Awk funcționează prin citirea unui fișier text sau a unui flux de intrare într-o singură linie. Fiecare linie este scanată pentru a vedea dacă se potrivește cu un model predefinit. Dacă se găsește o potrivire, se efectuează o acțiune.

Dar, în timp ce Sed și Awk pot împărtăși scopuri similare, sunt două limbi complet diferite, cu două filozofii de design complet diferite. Awk se aseamănă mai mult cu unele limbi de uz general Cum de a alege o limbă de programare pentru a învăța astăzi și a obține un loc de muncă excelent în 2 ani Cum de a alege o limbă de programare pentru a învăța astăzi și obține un loc de muncă excelent în 2 ani Poate nevoie de ani de muncă dedicată să devii un programator cu adevărat bun; deci există o cale de a alege limba potrivită pentru a începe de azi, pentru a fi angajat mâine? Citiți mai multe, cum ar fi C, Python și Bash. Ea are lucruri precum funcții și o abordare mai asemănătoare cu C la lucruri precum iterația și variabilele (James Bruce a explicat cum funcționează iterația) Bazele absolutului de programare pentru începători (partea 2) Bazele absolută a programării pentru începători (partea 2) 2 din ghidul nostru absolut de incepatori pentru programare, voi acoperi elementele de baza ale functiilor, valorile returnate, buclele si conditiile. Asigurati-va ca ati citit partea 1 inainte de a aborda acest lucru, unde i-am explicat ... Citeste mai mult). Pune simplu, se simte mai mult ca un limbaj de programare.

Deci, hai să încercăm. Folosind versurile pentru Take On Me, vom imprima toate liniile cu o lungime mai mare de 20 de caractere.

awk '($ 0)> 80' tom.txt 

Următorul exemplu pe care l-am făcut cinic din documentația oficială Awk. Dar este un exemplu foarte bun al potențialului acestui limbaj puternic, dar foarte mic. Este, de asemenea, o mare demonstrație a modului în care lucrurile precum iterația și variabilele funcționează în ea. Mai întâi, creați un fișier numit “WordCount.awk”, și adăugați următoarele linii.

pentru (i = 1; i <= NF; i++) freq[$i]++ 
END pentru (cuvânt în frecvență) printf "% s \ t% d \ n", cuvânt, frecvență [cuvânt]

Salvați-l, apoi executați-l cu următoarea comandă.

awk -f WordCount.awk tom.txt


Răcoros, nu? Probabil că veți observa că nu sunt în ordine. Tu poate sa sortați rezultatele utilizând utilitarul de sortare Unix. Dar o să lăsăm asta pentru o altă zi. Vom menține simplu.

Combinând cele două

Awk și Sed sunt incredibil de puternice când sunt combinate. Puteți face acest lucru folosind țevi Unix. Acestea sunt “|” biți între comenzi.

Să încercăm acest lucru: Vom enumera toate liniile din Take On Me, care au mai mult de 20 de caractere, folosind Awk. Apoi, vom renunța la toate liniile care încep “Lua”. Împreună, totul arată astfel:

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

Și produce acest lucru:

Acum, hai să ne întoarcem. Vom începe să eliminăm toate liniile care încep cu Take și apoi să le ducem în Awk, unde vom număra de câte ori apare fiecare cuvânt. Arată cam așa:

cat tom.txt | sed / ^ Take / d | awk -f WordCount.awk

Puterea lui Sed și Awk

Numai așa puteți explica într-un singur articol. Dar sper că am ilustrat cât de nesemnificativ sunt Sed și Awk. Pur și simplu, sunt un centru de procesare a textului.

Deci, de ce ar trebui să vă pese? Ei bine, pe lângă faptul că nu știi niciodată când trebuie să faci modificări previzibile, repetitive la un document text, Sed și Awk sunt excelente pentru parsarea fișierelor jurnal. Acest lucru este util în special atunci când încercați să depanați o problemă în serverul dvs. LAMP Semnat pentru Web Hosting numai pentru SSH? Nu vă faceți griji - instalați cu ușurință orice software Web înscris pentru SSH-numai Web Hosting? Nu vă faceți griji - instalați ușor orice software Web Nu știți primul lucru despre operarea Linux prin linia sa de comandă puternică? Nu vă mai faceți griji. Citiți mai multe sau căutați jurnalele de acces pentru a vedea dacă serverul dvs. a fost hacked.

Ați găsit o utilizare interesantă pentru Sed și Awk? Există alte utilitare Linux care te simți subevaluate? Anunță-mă în comentariile de mai jos și vom vorbi.

Explorați mai multe despre: Terminal, Editor de text.