Skelbimas

Dvi labiausiai nusikalstamai neįvertintos „Linux“ komunalinės paslaugos yra „Sed“ ir „Awk“. Nors, be abejo, jie gali atrodyti šiek tiek archetiškai, jei jums kada nors reikės pakartoti didelius kodo ar teksto fragmentus arba jei kada nors teks analizuoti kokį nors tekstą, Sed ir Awk yra neįkainojami.

Taigi, kokie jie? Kaip jie naudojami? Ir kaip kartu sudėjus jie palengvina teksto apdorojimą?

Kas yra Sed?

Sed buvo sukurtas 1971 m „Bell Labs“, kurį sukūrė legendinis skaičiavimo pradininkas Lee E. McMahon.

Pavadinimas reiškia srauto redaktorius, ir tai, ko gero, tai daro. Tai leidžia jums redaguoti teksto dalis ar srautus programiškai, naudojant kompaktišką ir paprastą, tačiau visapusišką programavimo kalbą.

Tai, kaip ji veikia, yra paprasta: kiekvieną eilutės eilutę jis perskaito tekstą į buferį. Kiekvienai eilutei ji atliks iš anksto nustatytas instrukcijas, jei taikoma.

Pvz., Jei kas nors turėtų parašyti „Sed“ scenarijų, kuris žodį „alus“ pakeitė žodžiu „soda“, o tada perduotų tekstinėje rinkmenoje, kurioje būtų visas tekstas dainų žodžiai „99 buteliai alaus ant sienos“, jis eitų per tą failą eilutėmis ir išspausdintų „99 butelius sodos ant sienos“ ir tt apie.

instagram viewer

Pats paprasčiausias „Sed“ scenarijus yra „Hello World“. „Hello World“ spausdinimui naudojame „Unix Echo“ programą, kuri išveda tik eilutes. Bet mes nukreipiame tai į Sedą ir liepiame pakeisti „World“ į „Dave“. Savaime suprantama medžiaga.

aidas „Sveikas pasaulis“ | sed s / pasaulis / Dave'as
sedawk-dave

Taip pat galite sujungti „Sed“ instrukcijas į failus, jei jums reikia atlikti šiek tiek sudėtingesnį redagavimą. Įkvėpė ši linksma „Reddit“ gija, Aš perkelsiu dainų tekstus į „A-Ha“ Išbandyk maneir pakeiskite kiekvieną „Aš“, „Aš“ ir „Mano“ egzempliorius Gregu.

Pirmiausia dainos tekstą įdėsiu į tekstinį failą, vadinamą tom.txt. Tada atidarysiu norimą teksto rengyklę (mano mėgstamiausias yra Vimas 7 pagrindinės priežastys, leidžiančios suteikti „Vim“ teksto redaktoriui galimybęMetų metus bandžiau vieną teksto rengyklę po kitos. Tu pavadink tai, aš išbandžiau. Kiekvieną iš šių redaktorių naudojau daugiau nei du mėnesius kaip savo pagrindinį kasdienį redaktorių. Kažkaip aš ... Skaityti daugiau , bet Nano nano vs. vim: palyginti terminalo teksto redaktoriaiNors „Linux“ tapo pakankamai paprasta, kad ja galėtų naudotis bet kas niekada ir niekada nesinaudoję terminalu, yra keletas iš mūsų, kurie juo reguliariai naudojasi ar kuriems įdomu, kaip valdyti ... Skaityti daugiau ir Gedit „gedit“: vienas iš paprasčiausių paprasto teksto redaktorių, turintis savybes, [„Linux“ ir „Windows“]Kai galvojate apie paprasto teksto redaktorius, pirmas dalykas, kuris gali pasirodyti jūsų galvoje, yra „Windows“ užrašų programa. Tai daro tiksliai tai, kas nurodyta jo darbo apraše - paprastos teksto ypatybės ... Skaityti daugiau yra puikus pasirinkimas) ir pridėkite šias eilutes. Įsitikinkite, kad jūsų sukurtas failas baigiasi .są.

sed-greg-sed

Galite pastebėti, kad aukščiau pateiktame pavyzdyje aš pakartojau save (pvz., S / me / Greg / ir s / Me / Greg /). Taip yra todėl, kad tai daro kai kurios „Sed“ versijos, pavyzdžiui, tos, kuri pristatoma kartu su „Mac OS X“ ne palaiko atitikimą didžiųjų ir mažųjų raidžių atžvilgiu. Dėl to mes turime parašyti dvi Sed instrukcijas kiekvienam žodžiui, todėl jis atpažįsta didžiąją ir ne kapitalizuotąją versiją.

Tai neveiks tobulai, tarsi būtumėte pakeitę kiekvieną „aš“, „aš“ ir „mano“ egzempliorių ranka. Atminkite, kad mes tiesiog naudojame tai kaip pratimą, norėdami parodyti, kaip galite sugrupuoti Sed instrukcijas į vieną scenarijų ir tada vykdyti jas viena komanda.

Tada turime iškviesti failą. Norėdami tai padaryti, vykdome šią komandą.

katė tom.txt | sed -f greg.sed

Lėtėkime ir pažiūrėkime, ką tai daro. Eglės akimis skaitytojai pastebės, kokie esame ne naudojant čia „Echo“. Mes naudojame katę. Taip yra todėl, kad kol „Cat“ išspausdins visą failo turinį, „echo“ išspausdins tik failo pavadinimą. Jūs taip pat pastebėjote, kad mes einame Sedą su „-f“ vėliava. Tai liepia atidaryti scenarijų kaip failą.

Galutinis rezultatas yra toks.

„sed-greg“ scenarijus

Taip pat verta paminėti, kad Sed palaiko įprastas išraiškas (REGEX). Tai leidžia apibrėžti teksto šablonus, naudojant specialią ir sudėtingą sintaksę.

Štai pavyzdys, kaip tai gali veikti. Mes imsimės minėtų dainų žodžių, tačiau naudodami regex spausdinkite kiekvieną eilutę nėra pradėkite nuo „Imk“.

katė tom.txt | sed / ^ imk / d
sed-regex-take

Sed, be abejo, yra nepaprastai naudingas. Bet jis dar galingesnis, kai derinamas su „Awk“.

Kas yra Awk?

Awk, kaip ir „Sed“, yra programavimo kalba, skirta dirbti su dideliais teksto elementais. Nors Sed yra naudojamas tekstui apdoroti ir modifikuoti, Awk dažniausiai naudojamas kaip įrankis analizė ir ataskaitų teikimas.

Kaip ir Sed, „Awk“ pirmą kartą buvo sukurtas „Bell Labs“ aštuntajame dešimtmetyje. Jos pavadinimas kilęs ne iš programos daro, o veikiau kiekvieno iš autorių pavardės - Alfredo Aho, Peterio Weinbergerio ir Briano Kernaghano.

„Awk“ veikia skaitydama teksto failą arba įvesties srautą po vieną eilutę. Kiekviena eilutė yra nuskaityta, norint pamatyti, ar ji atitinka iš anksto nustatytą modelį. Jei randama atitiktis, atliekamas veiksmas.

Nors Sedą ir Awką gali sieti panašūs tikslai, tai yra dvi visiškai skirtingos kalbos, turinčios dvi visiškai skirtingas dizaino filosofijas. Awkas labiau primena kai kuriuos bendrosios kalbos kalbos Kaip pasirinkti programavimo kalbą, kad išmoktumėte šiandien ir gautumėte puikų darbą per 2 metusNorint tapti išties geru programuotoju, gali prireikti daug metų atsidavusio darbo; Taigi ar yra būdas pasirinkti teisingą kalbą, pradedant nuo šiandien, kad rytoj būtų galima įdarbinti? Skaityti daugiau , kaip „C“, „Python“ ir „Bash“. Tai tokie dalykai kaip funkcijos ir labiau C požiūris į tokius dalykus kaip iteracija ir kintamieji (James Bruce paaiškino, kaip veikia iteracija Absoliutūs programavimo pagrindai pradedantiesiems (2 dalis)Absoliučio pradedančiųjų programavimo vadovo 2 dalyje aprašysiu funkcijų pagrindus, grąžinimo reikšmes, kilpas ir sąlygas. Prieš pradėdami spręsti šią problemą, būtinai perskaitykite 1 dalį, kur paaiškinau ... Skaityti daugiau ). Paprasčiau tariant, tai labiau panašu į programavimo kalbą.

Taigi, išbandykime tai. Naudodamiesi „Take On Me“ dainų tekstais, mes atspausdinsime visas eilutes, ilgesnes nei 20 simbolių.

awk 'ilgis (0 USD)> 80' tom.txt negražaus ilgio

Kitas pavyzdys begėdiškai atsiklaupė nuo oficialią „Awk“ dokumentaciją. Bet tai puikus šios galingos, tačiau mažos kalbos potencialo pavyzdys. Tai taip pat puikiai parodo, kaip joje veikia tokie veiksmai kaip iteracija ir kintamieji. Pirmiausia sukurkite failą pavadinimu „WordCount.awk“ ir pridėkite šias eilutes.

{už (i = 1; i <= NF; i ++) dažnis [$ i] ++ }
END {for (žodis dažniu) printf "% s \ t% d \ n", žodis, dažn. [Žodis] }

Išsaugokite jį ir paleiskite naudodami šią komandą.

awk -f WordCount.awk tom.txt

nepatogus žodžių skaičius
Šaunu, tiesa? Turbūt pastebėsite, kad jie nėra tvarkingi. Tu gali Rūšiuokite rezultatus naudodami „Unix“ rūšiavimo įrankį. Bet mes paliksime tai kitai dienai. Mes stengsimės, kad tai būtų paprasta.

Dviejų sujungimas

„Awk“ ir „Sed“ kartu yra neįtikėtinai galingi. Tai galite padaryti naudodami „Unix“ vamzdžius. Tai yra „|“ bitai tarp komandų.

Pabandykime tai padaryti: naudodami „Awk“ surašysime visas „Take On Me“ eilutes, turinčias daugiau nei 20 simbolių. Tada mes pašalinsime visas linijas, kurios prasideda „Imk“. Kartu viskas atrodo taip:

awk 'ilgis ($ 0)> 20' tom.txt | sed / ^ imk / d

Ir gamina tai:

awk-ilgio-sed

Dabar apverskime tai. Pradėsime pašalindami visas eilutes, kurios prasideda „Take“, ir tada nukreipkite jas į „Awk“, kur suskaičiuosime, kiek kartų kiekvienas žodis pasirodo. Tai atrodo šiek tiek taip:

katė tom.txt | sed / ^ imk / d | awk -f WordCount.awk
awk-wordcount-sed

Sedos ir siaubo galia

Viename straipsnyje galite paaiškinti tik tiek. Bet aš tikiuosi, kad aš pademonstravau, kaip nepaprastai galingi Sed ir Awk yra. Paprasčiau tariant, jie yra teksto apdorojimo stiprintuvas.

Taigi, kodėl jums tai turėtų rūpėti? Na, be to, kad niekada nežinai, kada reikia atlikti nuspėjamus, pasikartojančius teksto dokumento pakeitimus, „Sed“ ir „Awk“ puikiai tinka analizuoti žurnalo failus. Tai ypač patogu, kai bandote derinti problemą jūsų LAMP serveryje Prisiregistravote naudoti tik SSH žiniatinklio prieglobą? Nesijaudinkite - lengvai įdiekite bet kokią žiniatinklio programinę įrangąNežinai pirmojo dalyko, kai „Linux“ naudojama per galingą komandinę eilutę? Daugiau nesijaudink. Skaityti daugiau , arba pažiūrėję į jūsų prieigos žurnalus pamatysite, ar jūsų serveris nebuvo nulaužtas.

Ar radote įdomų „Sed and Awk“ panaudojimą? Ar yra kokių nors kitų „Linux“ paslaugų, kurios, jūsų manymu, yra nepakankamai įvertintos? Praneškite man toliau pateiktuose komentaruose ir mes kalbėsimės.

Matthew Hughes yra programinės įrangos kūrėjas ir rašytojas iš Liverpulio, Anglijos. Jis retai randamas be stiprios juodos kavos puodelio rankoje ir absoliučiai dievina savo „Macbook Pro“ ir fotoaparatą. Jo dienoraštį galite perskaityti http://www.matthewhughes.co.uk ir sekite jį „Twitter“ adresu @matthewhughes.