Reklama
Dva z najviac kriminálne podcenených linuxových utilít sú Sed a Awk. Aj keď sa síce môžu zdať trochu tajomné, ak ste niekedy museli urobiť opakujúce sa zmeny veľkých častí kódu alebo textu, alebo ak ste niekedy museli nejaký text analyzovať, Sed a Awk sú neoceniteľné.
Čo sú zač? Ako sa používajú? A ako, keď sa skombinujú, uľahčujú spracovanie textu?
Čo je sed?
sed bol vyvinutý v roku 1971 v Bell Labs, legendárnym priekopníkom v oblasti výpočtovej techniky Lee E. McMahon.
Názov znamená editor streamua to je to, čo robí. Umožňuje upravovať telá alebo toky textu programovo, prostredníctvom kompaktného a jednoduchého programovacieho jazyka Turing-komplet.
Spôsob, akým to funguje, je jednoduchý: číta text, riadok po riadku, do vyrovnávacej pamäte. V prípade potreby vykoná pre každý riadok preddefinované pokyny.
Napríklad, ak niekto mal napísať skript Sed, ktorý nahradil slovo „pivo“ slovom „sóda“, a potom odovzdal textový súbor, ktorý obsahoval celý text texty na „99 fliaš piva na stene“, prešiel by týmto súborom riadok po riadku a vytlačil „99 fliaš sódy na stene“, a tak ďalej.
Najzákladnejší skript Sed je Hello World. Tu používame pomôcku Unix Echo, ktorá iba vytvára výstupné reťazce, na tlač „Hello World“. Ale dáme to Sedovi a povieme, aby nahradil „Svet“ za „Dave”. Vysvetlivky.
echo "Ahoj svet" sed s / world / Dave
Môžete tiež skombinovať pokyny Sed do súborov, ak potrebujete urobiť komplikovanejšiu úpravu. Inšpirovaný toto veselé vlákno Reddit, Zoberiem texty do A-Ha Vezmi si maa nahraďte každý prípad „I“, „Ja“ a „Môj“ Gregom.
Najprv vložím text piesne do textového súboru s názvom tom.txt. Potom otvorím svoj preferovaný textový editor (môj obľúbený je Vim Top 7 dôvodov, prečo dať Vim Text Editor šancuCelé roky som vyskúšal jeden textový editor za druhým. Vy ste to pomenovali, skúsil som to. Každý z týchto editorov som používal viac ako dva mesiace ako svoj hlavný denný editor. Nejako ... Čítaj viac , ale Nano nano vs. vim: Porovnanie textových editorov termináluAj keď sa Linux stal dostatočne ľahkým na použitie prakticky pre každého bez toho, aby musel používať terminál, existuje niekoľko z nás, ktorí ho pravidelne používajú, alebo sú zvedaví, ako ho môže ovládať ... Čítaj viac a gedit gedit: Jeden z najdôležitejších textových editorov s plnými funkciami [Linux a Windows]Keď uvažujete o jednoduchých textových editoroch, prvá vec, ktorá sa vám môže dostať do hlavy, je aplikácia Poznámkový blok systému Windows. Robí presne to, čo uvádza jeho popis úlohy - jednoduché funkcie pre obyčajný text ... Čítaj viac sú vynikajúce možnosti) a pridajte nasledujúce riadky. Uistite sa, že vytvorený súbor končí .sed.
Možno si všimnete, že vo vyššie uvedenom príklade som sa opakoval (napr. S / me / Greg / a s / Me / Greg /). Je to preto, že niektoré verzie Sedu, ako napríklad verzia dodávaná so systémom Mac OS X, to umožňujú nie podporovať porovnávanie nerozlišujúce veľké a malé písmená. Výsledkom je, že pre každé slovo musíme napísať dva pokyny Sed, aby rozpoznal veľké a veľké písmená.
Toto nebude fungovať dokonale, akoby ste ručne nahradili každý prípad „ja“, „ja“ a „môj“. Pamätajte si, že to len používame ako cvičenie, aby sme ukázali, ako môžete zoskupiť inštrukcie Sed do jedného skriptu, a potom ich spustiť jediným príkazom.
Potom musíme súbor vyvolať. Aby sme to dosiahli, spustíme tento príkaz.
mačka tom.txt | sed -f greg.sed
Poďme spomaliť a pozrime sa, čo to robí. Čitatelia s očami orla si všimli, že sme nie pomocou Echo tu. Používame kat. Je to preto, že zatiaľ čo mačka vytlačí celý obsah súboru, echo vytlačí iba názov súboru. Všimli ste si tiež, že Sed používame s príznakom „-f“. Toto povie, aby skript otvoril ako súbor.
Konečným výsledkom je toto.
Je tiež potrebné poznamenať, že Sed podporuje regulárne výrazy (REGEX). Umožňujú definovať vzory v texte pomocou špeciálnej a komplikovanej syntaxe.
Tu je príklad, ako by to mohlo fungovať. Zoberieme vyššie uvedené texty piesní, ale pomocou regulárneho výrazu vytlačíme každý riadok, ktorý je nie je začnite „Take“.
mačka tom.txt | sed / ^ Take / d
Sed je, samozrejme, neuveriteľne užitočné. Ale v kombinácii s Awk je ešte výkonnejší.
Čo je Awk?
awk, rovnako ako Sed, je programovací jazyk určený na prácu s veľkými textami. Ale zatiaľ čo Sed sa používa na spracovanie a úpravu textu, Awk sa väčšinou používa ako nástroj analýza a reporting.
Rovnako ako Sed, Awk bol prvýkrát vyvinutý v Bell Labs v sedemdesiatych rokoch. Jeho názov nepochádza z toho, čo program robí, ale priezviská všetkých autorov - Alfred Aho, Peter Weinberger a Brian Kernaghan.
Program Awk pracuje tak, že prečíta textový riadok alebo vstupný tok naraz po jednom riadku. Každý riadok sa naskenuje, aby sa zistilo, či zodpovedá preddefinovanému vzoru. Ak sa nájde zápas, vykoná sa akcia.
Ale zatiaľ čo Sed a Awk môžu zdieľať podobné účely, sú to dva úplne odlišné jazyky s dvoma úplne odlišnými filozofiami dizajnu. Awk sa viac podobá niektorým jazyky na všeobecné použitie Ako si vybrať programovací jazyk, ktorý sa chcete dnes naučiť a získať skvelú prácu za 2 rokyStať sa skutočne dobrým programátorom môže trvať roky špecializovanej práce; existuje teda spôsob, ako zvoliť ten správny jazyk, ktorý sa má začať dnes, aby ste si ho zajtra najali? Čítaj viac , napríklad C, Python a Bash. Má veci ako funkcie a prístup podobnejší ako C iterácia a premenné (James Bruce vysvetlil, ako funguje iterácia Absolútne základy programovania pre začiatočníkov (2. časť)V časti 2 nášho sprievodcu programovaním pre úplných začiatočníkov sa venujem základným funkciám, návratovým hodnotám, slučkám a podmienkam. Pred riešením tohto problému si prečítajte prvú časť, kde som vysvetlil ... Čítaj viac ). Zjednodušene povedané, je to skôr ako programovací jazyk.
Skúsme to. Pomocou textov Take On Me Me vytlačíme všetky riadky, ktoré sú dlhšie ako 20 znakov.
awk 'length ($ 0)> 80' tom.txt
Nasledujúci príklad nehanebne od detstva oficiálna dokumentácia Awk. Je to však vynikajúci príklad potenciálu tohto mocného, napriek tomu malého jazyka. Je to tiež vynikajúca ukážka toho, ako v nej fungujú veci ako iterácia a premenné. Najskôr vytvorte súbor s názvom „WordCount.awk“ a pridajte nasledujúce riadky.
{pre (i = 1; i <= NF; i ++) freq [$ i] ++ }
END {pre (slovo vo frekv.) Printf "% s \ t% d \ n", slovo, freq [slovo] }
Uložte ho a potom ho spustite pomocou nasledujúceho príkazu.
awk -f WordCount.awk tom.txt
Super, však? Pravdepodobne si všimnete, že nie sú v akomkoľvek poradí. vy môcť výsledky triediť pomocou pomôcky Unix sort. Ale necháme to na ďalší deň. Budeme to udržiavať jednoduché.
Kombinácia dvoch
Awk a Sed sú spolu neuveriteľne silné. Môžete to urobiť pomocou rúr Unix. Toto sú „|“ bity medzi príkazmi.
Skúsme to: V zozname Awk uvádzame zoznam všetkých riadkov v Take On Me, ktoré majú viac ako 20 znakov. Potom odstránime všetky riadky, ktoré začínajú "Take". Spoločne to vyzerá takto:
awk 'length ($ 0)> 20' tom.txt | sed / ^ Take / d
A produkuje to:
Teraz to prehodíme. Začneme odstránením všetkých riadkov, ktoré začínajú programom Take, a potom ich dáme do Awk, kde spočítame, koľkokrát sa každé slovo objaví. Vyzerá to trochu takto:
mačka tom.txt | sed / ^ Take / d | awk -f WordCount.awk
Sila Sed a Awk
V jedinom článku môžete vysvetliť iba toľko informácií. Dúfam však, že som ilustroval, aké nesmierne silné sú Sed a Awk. Zjednodušene povedané, jedná sa o powerhouse na spracovanie textu.
Tak prečo by ste sa mali starať? No, okrem toho, že nikdy neviete, kedy potrebujete urobiť predvídateľné, opakované zmeny v textovom dokumente, Sed a Awk sú skvelé pre analýzu protokolových súborov. Toto je obzvlášť užitočné, keď sa snažíte problém ladiť na vašom serveri LAMP Zaregistrovali ste sa na webhosting iba s SSH? Nerobte si starosti - ľahko inštalujte akýkoľvek webový softvérNeviete prvú vec, ktorá sa týka operačného systému Linux prostredníctvom jeho výkonného príkazového riadka? Už sa nemusíte báť. Čítaj viac alebo prezeraním protokolov prístupu, aby ste zistili, či bol váš server napadnutý hackermi.
Našli ste zaujímavé použitie pre Sed a Awk? Existujú nejaké ďalšie pomocné programy pre Linux, ktoré podľa vás nie sú ocenené? Dajte mi vedieť v komentároch nižšie a budeme sa zhovárať.
Matthew Hughes je vývojár a spisovateľ softvéru z anglického Liverpoolu. Málokedy ho nájde bez šálky silnej čiernej kávy v ruke a úplne zbožňuje jeho Macbook Pro a fotoaparát. Jeho blog si môžete prečítať na stránke http://www.matthewhughes.co.uk a sledujte ho na Twitteri na adrese @matthewhughes.