Oglas

Sedma in najbolj ovrednotena orodja za Linux sta kriminalno premalo cenjena. Čeprav se res zdi, da so malce skrivnostni, če boste kdaj morali ponavljati velike delce kode ali besedila ali če boste kdaj morali analizirati kakšno besedilo, sta Sed in Awk neprecenljiva.

Torej, kaj so oni? Kako se uporabljajo? In kako skupaj združijo besedilo, da lažje obdelajo besedilo?

Kaj je sed?

Sed je bil razvit leta 1971 na Bell Labs, s strani legendarnega računalniškega pionirja Lee E. McMahon.

Ime pomeni urejevalnik tokovin to je nekako tisto, kar počne. Omogoča vam urejanje teles ali tokov besedila programsko, s kompaktnim in preprostim, vendar Turingovim popolnim programskim jezikom.

Način delovanja je preprost: bere besedilo po vrstici v medpomnilnik. Za vsako vrstico bo po potrebi izvajal vnaprej določena navodila.

Na primer, če bi nekdo napisal skript Sed, ki je besedo "pivo" zamenjal s "soda", in nato prenesel v besedilno datoteko, ki vsebuje celotno besedilo do "99 stekleničk piva na steni", šlo bi skozi to datoteko po vrstici in natisnilo "99 stekleničk sode na steni" in tako naprej.

Najosnovnejši scenarij Sed je Hello World. Tu uporabljamo pripomoček Unix Echo, ki zgolj oddaja strune za tiskanje "Hello World". Toda to povežemo Sedu in mu rečemo, da nadomešča "Svet" z "Dave". Sama pojasnjevalna stvar.

odmev "Pozdravljeni svet" | sed s / svet / Dave
sedawk-dave

Navodila Sed lahko kombinirate tudi v datoteke, če morate narediti bolj zapleteno urejanje. Navdihnjen od ta smešna rdeča nit, Besedila bom prevzel za A-Ha Vzemi me, in zamenjajte vsak primerek "I", "Ja" in "My" z Gregom.

Najprej bom besedilo pesmi dal v besedilno datoteko z imenom tom.txt. Nato bom odprl svoj najljubši urejevalnik besedil (moj najljubši je Vim Najboljših 7 razlogov, da lahko urednik besedila Vim ponudi priložnostDolga leta preizkušam urejevalnik besedil za drugim. Poimenujete, poskusil sem. Vsakega od teh urejevalnikov sem uporabljal več kot dva meseca kot svoj glavni dnevni urednik. Nekako ... Preberi več , ampak Nano nano vs. vim: Primerjalniki besedila terminalov v primerjaviČeprav je Linux postal dovolj preprost, da ga praktično vsi ne morejo uporabljati, ne da bi jim bilo treba kdaj uporabiti Terminal, obstaja nekaj nas, ki ga redno uporabljamo ali smo radovedni, kako lahko upravljamo ... Preberi več in Gedit gedit: Eden najbolj urejenih navadnih urejevalnikov besedila [Linux in Windows]Ko pomislite na urejevalnike navadnega besedila, je prva stvar, ki vam lahko pride v glavo, aplikacija Windows Notepad. Naredi natanko tako, kot piše v opisu dela - navadne funkcije za navadno besedilo ... Preberi več sta odlična izbira) in dodajte naslednje vrstice. Poskrbite, da se datoteka, s katero ustvarite, konča .sed.

sed-greg-sed

Morda boste opazili, da sem se v zgornjem primeru ponavljal (npr. S / me / Greg / in s / Me / Greg /). To je zato, ker nekatere različice Seda, kot je tista, ki je priložena Mac OS X, to počnejo ne podpora ujemanju z neobčutljivim primerom. Kot rezultat tega moramo za vsako besedo napisati dve navodili Sed, tako da prepozna veliko in veliko začetnico.

To ne bo delovalo brezhibno, kot da ste ročno zamenjali vsak primerek »jaz«, »jaz« in »moje«. Ne pozabite, da to uporabljamo samo kot vajo, da pokažemo, kako lahko navodila Sed povežete v en skript in jih nato izvedete z enim ukazom.

Nato moramo datoteko priklicati. Da bi to naredili, zaženemo ta ukaz.

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

Upočasnimo in poglejmo, kaj to počne. Bralci orlovskih oči bodo opazili, da smo ne tukaj uporabljamo Echo. Uporabljamo Cat. To je zato, ker bo Cat izpisoval celotno vsebino datoteke, odmev pa bo natisnil samo ime datoteke. Opazili boste tudi, da vodimo Sed z zastavico „-f“. To pove, da se skript odpre kot datoteka.

Končni rezultat je to.

sed-greg-skripta

Omeniti velja tudi, da Sed podpira regularne izraze (REGEX). Te omogočajo določitev vzorcev v besedilu z uporabo posebne in zapletene skladnje.

Tu je primer, kako lahko to deluje. Vzeli bomo prej omenjena besedila pesmi, vendar uporabite regex, da natisnete vsako vrstico ne začnite z »Vzemi«.

mačji tom.txt | sed / ^ Vzemi / d
sed-regex-take

Sed je seveda neverjetno uporaben. Še bolj zmogljiv pa je v kombinaciji z Awk.

Kaj je Awk?

AwkTako kot Sed je programski jezik, zasnovan za obravnavo velikih besedil. Toda medtem ko se Sed uporablja za obdelavo in spreminjanje besedila, se Awk večinoma uporablja kot orodje za analiza in poročanje.

Tako kot Sed je bil Awk prvič razvit v Bell Labs v sedemdesetih letih prejšnjega stoletja. Ime ne izvira iz tega, kar je program naredi, ampak bolj priimki vsakega od avtorjev - Alfred Aho, Peter Weinberger in Brian Kernaghan.

Awk deluje tako, da bere besedilno datoteko ali vhodni tok po eno vrstico. Vsaka vrstica se skenira, da ugotovi, ali ustreza vnaprej določenemu vzorcu. Če se najde ujemanje, se izvede dejanje.

Čeprav imata Sed in Awk podobna namena, sta dva popolnoma različna jezika z dvema popolnoma različnima oblikovalskima filozofijama. Awk bolj spominja na nekatere jeziki s splošnim namenom Kako izbrati programski jezik, da se danes naučite in se odlično zaposlite v 2 letihResnično lahko traja leta predanega dela, da postaneš resnično dober programer; Torej obstaja način, da izberemo pravi jezik, da začnemo od danes, da se bomo jutri zaposlili? Preberi več , kot so C, Python in Bash. Ima stvari kot so funkcije in bolj podoben C-pristop do stvari, kot so iteracija in spremenljivke (James Bruce razložil, kako deluje iteracija Absolutne osnove programiranja za začetnike (2. del)V drugem delu našega absolutnega vodnika za programiranje za začetnike bom opisal osnove funkcij, povratne vrednosti, zanke in pogoje. Prepričajte se, da ste prebrali 1. del, preden ste se ga lotili, kjer sem pojasnil ... Preberi več ). Preprosto povedano, zdi se bolj kot programski jezik.

Torej, poskusimo. Z besedilom pesmi Take On Me bomo natisnili vse vrstice, ki so daljše od 20 znakov.

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

Naslednji primer sem brezsramno jaslice iz uradna dokumentacija Awk. Je pa odličen primer potenciala tega močnega, vendar majhnega jezika. Prav tako je odlična demonstracija delovanja stvari, kot so iteracija in spremenljivke. Najprej ustvarite datoteko z imenom »WordCount.awk« in dodajte naslednje vrstice.

{za (i = 1; i <= NF; i ++) freq [$ i] ++ }
END {for (beseda v freq) printf "% s \ t% d \ n", beseda, freq [word] }

Shranite ga in ga zaženite z naslednjim ukazom.

awk -f WordCount.awk tom.txt

awk-število besed
Kul, kajne? Verjetno boste opazili, da niso v nobenem vrstnem redu. Ti lahko rezultate razvrstite z orodjem za razvrščanje Unix. Toda to bomo pustili še en dan. Poenostavili ga bomo.

Združevanje dveh

V kombinaciji sta Awk in Sed neverjetno močna. To lahko storite z uporabo cevi Unix. To so "|" bitov med ukazi.

Poskusimo tako: z Awk bomo našteli vse vrstice v filmu Take On Me z več kot 20 znaki. Potem bomo odstranili vse črte, ki se začnejo "Vzemi". Skupaj je vse videti tako:

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

In ustvari to:

awk-dolžina-sed

Zdaj pa preglejmo. Začeli bomo z odstranitvijo vseh vrstic, ki se začnejo z Take in jih nato poslati v Awk, kjer bomo prešteli, kolikokrat se vsaka beseda pojavi. Zdi se nekako takole:

mačji tom.txt | sed / ^ Vzemi / d | awk -f WordCount.awk
awk-wordcount-sed

Moč Sed in Awk

Obstaja le toliko, kar lahko razložite v enem samem članku. Upam pa, da sem ponazoril, kako neizmerno sta močna Sed in Awk. Preprosto povedano, to je elektrarna za obdelavo besedil.

Zakaj bi torej skrbel? No, poleg dejstva, da nikoli ne veste, kdaj morate narediti predvidljive, ponavljajoče se spremembe besedilnega dokumenta, sta Sed in Awk odlična za razčlenitev dnevniških datotek. To je še posebej priročno, ko poskušate odpraviti težavo v strežniku LAMP Ste prijavljeni za spletno gostovanje samo za SSH? Ne skrbite - enostavno namestite katero koli spletno programsko opremoNe veste, kaj je pri delovanju Linuxa prek njegove zmogljive ukazne vrstice? Ne skrbi več. Preberi več ali si ogledate svoje dnevnike dostopa in preverite, ali je bil vaš strežnik vlomljen.

Ste našli zanimivo uporabo za Sed in Awk? Ali obstajajo še kakšni pripomočki za Linux, za katere menite, da so premalo cenjeni? Sporočite mi v spodnjih komentarjih in poklepetali bomo.

Matthew Hughes je razvijalec programske opreme in pisatelj iz Liverpoola v Angliji. Redko ga najdemo brez skodelice močne črne kave v roki in absolutno obožuje svoj Macbook Pro in svoj fotoaparat. Njegov blog lahko preberete na http://www.matthewhughes.co.uk in mu sledite na twitterju na @matthewhughes.