Svaki Linux Geek treba znati Sed i Awk. Evo zašto ...

  • Harry James
  • 0
  • 1970
  • 566
Oglas

Dva najzastupljenija Linuxova alata su Sed i Awk. Iako se doima, mogu izgledati pomalo skriveno, ako ikad budete trebali ponavljati velike dijelove koda ili teksta ili ako ćete ikad morati analizirati neki tekst, Sed i Awk su neprocjenjivi.

Pa, što su oni? Kako se koriste? I kako, kada se kombiniraju zajedno, olakšavaju obradu teksta?

Što je Sed?

Sed je razvijen 1971. u Bell Labs, legendarni pionir računalstva Lee E. McMahon.

Naziv se zalaže uređivač struje, i to je nekako ono što radi. Omogućuje vam uređivanje tijela ili strujanja teksta programski, kroz kompaktan i jednostavan, a istovremeno Turingov programski jezik.

Način rada je jednostavan: čita tekst, red po redak, u međuspremnik. Za svaki će redak izvoditi unaprijed definirane upute, ako je primjenjivo.

Na primjer, ako bi netko napisao Sed skriptu koja je zamijenila riječ “pivo” s “soda”, a zatim proslijedio u tekstualnu datoteku koja je sadržavala cjelokupni tekst “99 Boca piva na zidu”, ona bi prošla kroz tu datoteku, red po redak, i ispisivala se “99 Boca sode na zidu”, i tako dalje.

Najosnovnija Sed scenarija je Hello World. Ovdje za ispis koristimo uslužni program Unix Echo, koji samo ispisuje nizove “Pozdrav svijete”. Ali to cijevimo kod Seda i kažemo da zamijeni “Svijet” s”Dave”. Samorazumljive stvari.

odjek "Pozdrav svijetu" | sed s / svijet / Dave

Možete i kombinirati upute Sed u datoteke, ako trebate napraviti nešto složenije uređivanje. Inspiriran ovom smiješnom Reddit nitom, tekst ću prenijeti na A-Ha Uzmi na mene, i zamijenite svaku instancu “ja”, “Mi”, i “Moj”, s Gregom.

Prvo ću tekst pjesme staviti u tekstualnu datoteku pod nazivom tom.txt. Tada ću otvoriti svoj omiljeni uređivač teksta (moj omiljeni je Vim. Top 7 razloga da se Vim uređivaču teksta pruži šansa. Top 7 razloga za pružanje šanse Vim uređivaču teksta. Godinama sam pokušao jedan uređivač teksta nakon Drugi, nazovite ga, pokušao sam. Koristio sam svaki od tih uređivača više od dva mjeseca kao svoj glavni svakodnevni urednik. Nekako, ja ..., ali Nano nano nasuprot vimu: Terminalni uređivač teksta u odnosu nano vs. vim: Uređivači teksta terminala Iako je Linux postao dovoljno jednostavan da ga praktički svi mogu koristiti bez ikakvog korištenja Terminala, postoje neki od nas koji ga redovito koriste ili su znatiželjni kako neko može kontrolirati ... i Gedit gedit: Jedan Od najpopularnijih urednika običnog teksta [Linux i Windows] gedit: Jedan od najpopularnijih uređivača jednostavnog teksta [Linux i Windows] Kada razmišljate o uređivačima običnog teksta, prva stvar koja vam se može pojaviti u glavi je Windows "Aplikacija za bilježnicu. Ona radi upravo ono što opisuje posao ates - obične značajke za običan tekst ... izvrsne su mogućnosti), i dodajte sljedeće retke. Osigurajte da se datoteka koju stvorite završava .sed.

Možda ćete primijetiti da sam u gornjem primjeru ponovio (npr. S / me / Greg / i s / Me / Greg /). To je zato što neke verzije Seda, poput one koja se isporučuje s Mac OS X, čine ne podržavaju podudarnost podudaranja između slučajeva. Kao rezultat toga, za svaku riječ moramo napisati po dvije upute Sed, tako da ona prepoznaje s velikim slovima napisane i velike slova.

To neće raditi savršeno kao da ste zamijenili svaku instancu “ja”, “Mi”, i “Moj” ručno. Zapamtite, mi to koristimo samo kao vježbu da pokažemo kako možete grupirati upute Sed u jednu skriptu, a zatim ih izvršiti s jednom naredbom.

Zatim moramo pozvati datoteku. Da bismo to postigli, izvršavamo ovu naredbu.

mačka tom.txt | sed -f greg.sed

Usporimo i pogledamo što ovo čini. Čitatelji orlova očiju primijetili su da smo ne koristeći Echo ovdje. Koristimo Cat. To je zato što će Cat ispisati cjelokupni sadržaj datoteke, a eho će ispisati samo naziv datoteke. Primijetili ste i da vodimo Sed sa “-f” zastava. To mu govori da otvori skriptu kao datoteku.

Krajnji rezultat je ovo.

Također je vrijedno napomenuti da Sed podržava regularne izraze (REGEX). Oni vam omogućuju definiranje obrazaca u tekstu, koristeći posebnu i kompliciranu sintaksu.

Evo primjera kako bi to moglo funkcionirati. Uzećemo gore navedene tekstove pjesama, ali upotrijebite regex za ispis svakog retka koji ne početi sa “Uzeti”.

mačka tom.txt | sed / ^ Uzmi / d

Sed je, naravno, nevjerojatno koristan. Ali još je snažniji u kombinaciji s Awkom.

Što je Awk?

Awk je, poput Seda, programski jezik dizajniran za rad s velikim tekstovima teksta. No dok se Sed koristi za obradu i izmjenu teksta, Awk se uglavnom koristi kao alat za analiza i izvještavanje.

Kao i Sed, Awk je prvi put razvijen u Bell Labs 1970-ih. Ime mu ne potječe od onoga što je program se, nego prezimena svakog od autora - Alfred Aho, Peter Weinberger i Brian Kernaghan.

Awk funkcionira tako što čita tekstualnu datoteku ili unosni tok jednu liniju. Svaki se redak skenira kako bi se vidjelo odgovara li unaprijed definiranom uzorku. Ako se pronađe podudaranje, izvodi se akcija.

No iako Sed i Awk mogu dijeliti slične svrhe, riječ je o dva potpuno različita jezika, s dvije potpuno različite filozofije dizajna. Awk poprilično podsjeća na neke jezike opće namjene Kako odabrati programski jezik kako biste naučili danas i dobili sjajan posao u dvije godine Kako odabrati programski jezik za učenje danas i dobiti sjajan posao za dvije godine. Za to će vam trebati godine posvećenog rada postati uistinu dobar programer; pa postoji način da odaberete pravi jezik koji će početi od danas, kako bi se sutra zaposlili? , poput C, Pythona i Bash-a. Ima stvari poput funkcija i više prilagođen C-pristupu stvarima poput iteracije i varijabli (James Bruce je objasnio kako iteracija djeluje Apsolutne osnove programiranja za početnike (2. dio) Apsolutne osnove programiranja za početnike (2. dio) Dijelom 2 našeg apsolutnog vodiča za početnike programiranja, obrađivat ću osnove funkcija, povratne vrijednosti, petlje i uvjetovanja. Obavezno pročitajte dio 1 prije nego što se pozabavite tim problemom, gdje sam objasnio ...). Jednostavno rečeno, to više liči na programski jezik.

Dakle, hajde da isprobamo. Koristeći tekst pjesme Take On Me, ispisat ćemo sve retke duže od 20 znakova.

awk 'dužina ($ 0)> 80' tom.txt 

Sljedeći sam primjer besramno oduzet iz službene dokumentacije Awk. Ali to je sjajan primjer potencijala ovog moćnog, a opet sićušnog jezika. To je također sjajna demonstracija kako stvari poput iteracije i varijabli rade u njoj. Prvo stvorite datoteku pod nazivom “WordCount.awk”, i dodajte sljedeće retke.

for (i = 1; i <= NF; i++) freq[$i]++ 
END for (riječ na frekvenciji) printf "% s \ t% d \ n", riječ, freq [riječ]

Spremite ga, a zatim ga pokrenite sljedećom naredbom.

awk -f WordCount.awk tom.txt


Kul, zar ne? Vjerojatno ćete primijetiti da nisu ni u kakvom redoslijedu. Vas limenka poredajte rezultate pomoću Unix uslužnog programa za sortiranje. Ali to ćemo ostaviti za još jedan dan. Jednostavno ćemo to učiniti.

Kombinacija dvoje

U kombinaciji su Awk i Sed nevjerojatno moćni. To možete učiniti pomoću Unix cijevi. To su oni “|” bita između naredbi.

Pokušajmo ovo: Navest ćemo sve retke u časopisu Take On Me koji sadrže više od 20 znakova pomoću awk-a. Zatim ćemo ukloniti sve crte koje počinju “Uzeti”. Zajedno, sve izgleda ovako:

awk 'dužina ($ 0)> 20' tom.txt | sed / ^ Uzmi / d

I proizvodi ovo:

A sad preokrenimo to. Započet ćemo uklanjanjem svih linija koje započinju s Takeom, a zatim ćemo ih poslati na Awk, gdje ćemo brojati koliko se puta svaka riječ pojavi. Izgleda pomalo ovako:

mačka tom.txt | sed / ^ Take / d | awk -f WordCount.awk

Snaga Sed i Awk

Postoji samo toliko toga što možete objasniti u jednom članku. Ali nadam se da sam ilustrirao koliko su neizmjerno snažni Sed i Awk. Jednostavno rečeno, oni su elektrana za obradu teksta.

Pa, zašto bi ti bilo stalo? Pa, osim činjenice da nikad ne znate kada trebate napraviti predvidljive, ponavljajuće promjene tekstualnog dokumenta, Sed i Awk su sjajni za raščlanjivanje datoteka dnevnika. To je posebno korisno kada pokušavate ispraviti problem na vašem LAMP poslužitelju. Prijavljeni ste za SSH samo za SSH? Ne brinite - lako instalirajte bilo koji web softver koji ste prijavljeni za web hosting samo za SSH? Ne brinite - laka instalacija bilo kojeg web softvera Ne znate prvu stvar o radu Linuxa putem njegove moćne naredbene linije? Ne brini više. ili ako pogledate svoje evidencije pristupa da vidite je li vaš poslužitelj hakiran.

Jeste li pronašli zanimljivu uporabu za Sed i Awk? Postoje li neki drugi alati za Linux za koje smatrate da su nedovoljno cijenjeni? Javite mi u komentarima u nastavku, i razgovarat ćemo.




Još ne komentari

O modernoj tehnologiji, jednostavnoj i pristupačnoj.
Vaš vodič u svijetu moderne tehnologije. Naučite kako koristiti tehnologije i uređaje koji nas okružuju svaki dan i naučite kako otkriti zanimljivosti na Internetu.