Oglas

Dvije najkriminiranije Linux cijene 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 razvijen je 1971 u Bell Labs, od strane legendarnog računarskog pionira 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 cjelovit programski jezik.

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

Na primjer, ako je netko napisao Sed skriptu koja je riječ "pivo" zamijenila sa "soda", a zatim proslijedila u datoteku s tekstom koja je sadržavala cijelu tekstova „99 boca piva na zidu“, prošla bi kroz tu datoteku pojedinačno, ispisivala „99 boca sode na zidu“, i tako dalje na.

Najosnovnija scenarij Sed je Hello World. Ovdje koristimo uslužni program Unix Echo koji samo ispisuje nizove za ispis "Hello World". Ali to prenosimo Sedu i kažemo da "Svijet" zamijeni sa "Dave". Samorazumljive stvari.

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

Možete i kombinirati upute Sed u datoteke, ako trebate napraviti nešto složenije uređivanje. Inspirirana ova urnebesna Reddit nit, Prenijet ću tekst pjesme A-Ha Uzmi na menei zamijenite svaku instancu "ja", "ja" i "moje" s Gregom.

Prvo ću tekst pjesme staviti u tekstnu datoteku pod nazivom tom.txt. Tada ću otvoriti željeni uređivač teksta (moj najdraži je Vim Prvih 7 razloga za pružanje šanse uredniku Vim tekstaGodinama pokušavam jedan uređivač teksta za drugim. Samo ime, pokušao sam. Svaki sam od tih uređivača koristio sam više od dva mjeseca kao svoj glavni svakodnevni urednik. Nekako, ja ... Čitaj više , ali Nano nano vs. vim: Usporedni uređivači teksta terminalaIako je Linux postao dovoljno jednostavan da ga praktički svi mogu koristiti bez upotrebe Terminala, postoje neki od nas koji ga redovito koriste ili su znatiželjni kako neko može kontrolirati ... Čitaj više i gedit gedit: Jedan od najpopularnijih uređivača jednostavnih tekstova [Linux i Windows]Kada razmišljate o uređivačima običnog teksta, prvo što vam se može javiti u glavi je Windows-ova aplikacija za bilježnicu. Čini upravo ono što navodi i njegov opis posla - obične značajke za običan tekst ... Čitaj više oba su odlična izbora), i dodajte sljedeće retke. Osigurajte da se datoteka koju stvorite završava .sed.

sed-Greg-sed

Možda ćete primijetiti da sam u gornjem primjeru ponovila sebe (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, rade ne podržavaju podudarnost podudaranja u slučaju. Kao rezultat, za svaku riječ moramo napisati po dvije instrukcije Sed, tako da ona prepoznaje slovnu i bezpitaliziranu verziju.

To neće funkcionirati savršeno kao da ste ručno zamijenili sve instance „ja“, „ja“ i „moje“. Zapamtite, mi to samo koristimo kao vježbu da pokažemo kako možete grupirati upute Sed u jednu skriptu, a zatim ih izvršavati 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 radi. Čitatelji očnih orlova primijetili su da jesmo 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. Također ćete primijetiti da izvodimo Sed sa zastavom „-f“. To mu govori da otvori skriptu kao datoteku.

Krajnji rezultat je ovo.

sed-Greg-skripta

Također je vrijedno napomenuti da Sed podržava regularne izraze (REGEX). Omogućuju vam definiranje obrazaca u tekstu pomoću posebne i složene sintakse.

Evo primjera kako to može funkcionirati. Uzet ćemo gore navedene tekstove pjesama, ali upotrijebite regex za ispis svakog retka koji ne započnite s „Uzmi“.

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

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

Što je Awk?

awkpoput Seda, programski je 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 ne potječe od onoga što je program se, već prezimena svakog od autora - Alfred Aho, Peter Weinberger i Brian Kernaghan.

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

No iako Sed i Awk mogu dijeliti slične svrhe, to su dva potpuno različita jezika, s dvije potpuno različite filozofije dizajna. Awk više podsjeća na neke jezici opće namjene Kako odabrati programski jezik kako biste naučili danas i dobili sjajan posao za 2 godineMožete potrajati godinama predanog rada da postanemo zaista dobar programer; tako da postoji način da odaberete pravi jezik koji će početi od danas, kako bi se sutra zaposlili? Čitaj više , poput C, Pythona i Bash-a. Ima stvari poput funkcija i više C-pristupa kao stvari poput iteracije i varijabli (James Bruce objasnio kako funkcionira iteracija Apsolutne osnove programiranja za početnike (2. dio)U drugom dijelu naših apsolutnih vodiča za početnike programiranja, prikazat ću osnove funkcija, povratne vrijednosti, petlje i uvjeti. Provjerite jeste li pročitali prvi dio prije nego što se riješite ovoga, gdje sam objasnio ... Čitaj više ). Jednostavno rečeno, to više liči na programski jezik.

Dakle, hajde da isprobamo. Pomoću tekstova Take on Me, ispisat ćemo sve retke duže od 20 znakova.

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

Sljedeći primjer sam besramno krevetić od službena dokumentacija Awk-a. Ali to je sjajan primjer potencijala ovog moćnog, ali malenog jezika. To je također sjajna demonstracija kako stvari poput iteracije i varijabli rade u njoj. Prvo napravite 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

awk-Broj riječi
Kul, zar ne? Vjerojatno ćete primijetiti da nisu ni u kakvom redoslijedu. Vas limenka sortirajte rezultate pomoću Unix uslužnog programa za sortiranje. Ali to ćemo ostaviti drugi dan. Sve ćemo to jednostavno učiniti.

Spajanje dvaju

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

Pokušajmo ovo: popisat ć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:

awk duljine-sed

A sada, razmotrimo to. Počet ćemo uklanjanjem svih linija koje započinju s Takeom, a zatim ih prenosimo u Awk, gdje ćemo brojati koliko se puta svaka riječ pojavi. Izgleda pomalo ovako:

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

Snaga Sed i Awk

Postoji samo toliko što možete objasniti u jednom članku. Nadam se da sam ilustrirao koliko su neizmjerno moćni Sed i Awk. Jednostavno rečeno, oni su pogon 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 web hosting samo? Ne brinite - lako instalirajte bilo koji web softverNe znate prvu stvar o radu Linuxa putem njegove moćne naredbene linije? Ne brini više. Čitaj 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 uslužni programi za Linux za koje smatrate da su podcijenjeni? Javite mi u komentarima u nastavku i razgovarat ćemo.

Matthew Hughes je programer i pisac softvera iz Liverpoola u Engleskoj. Rijetko se nađe bez šalice jake crne kave u ruci i apsolutno obožava svoj Macbook Pro i svoj fotoaparat. Njegov blog možete pročitati na http://www.matthewhughes.co.uk i slijedite ga na twitteru na @matthewhughes.