
Gabriel Brooks
0
4774
495
Dva z nejvíce kriminálně podceňovaných linuxových utilit jsou Sed a Awk. I když se sice mohou zdát trochu tajemné, pokud budete někdy muset provádět opakující se změny velkých kusů kódu nebo textu, nebo pokud budete někdy muset analyzovat nějaký text, Sed a Awk jsou neocenitelné.
Co jsou tedy? Jak se používají? A jak v kombinaci dohromady usnadňují zpracování textu?
Co je Sed?
Sed byl vyvinut v roce 1971 v Bell Labs, legendárním počítačovým průkopníkem Lee E. McMahonem.
Název znamená editor proudu, a to je docela to, co dělá. To vám umožní editovat těla nebo proudy textu programově, prostřednictvím kompaktního a jednoduchého, přesto lákavého programovacího jazyka.
Způsob, jakým to funguje, je jednoduchý: čte text, řádek po řádku do vyrovnávací paměti. V případě potřeby provede pro každý řádek předdefinované pokyny.
Například, pokud někdo měl napsat Sed skript, který nahradil slovo “pivo” s “soda”, a pak předal textový soubor, do kterého byly vloženy celé texty “99 lahví piva na zdi”, procházel by tímto souborem řádek po řádku a tiskl “99 lahví sody na zdi”, a tak dále.
Nejzákladnější skript Sed je Hello World. Zde tiskneme pomocí obslužného programu Unix Echo, který pouze vytváří řetězce “Ahoj světe”. Ale dáme to Sedovi a řekneme mu, aby ho nahradil “Svět” s”Dave”. Samovysvětlující věci.
echo "Ahoj svět" sed s / world / Dave
Můžete také zkombinovat instrukce Sed do souborů, pokud potřebujete provést komplikovanější úpravy. Inspirován tímto veselým vláknem Reddit, vezmu texty do A-Ha's Vezmi si mě, a nahradit každou instanci “Já”, “Mě”, a “Můj”, s Gregem.
Nejprve vložím texty k písni do textového souboru s názvem tom.txt. Pak otevřu svůj preferovaný textový editor (můj oblíbený je Vim Prvních 7 důvodů, proč dát textovému editoru Vim šanci Nejlepších 7 důvodů, proč dát textovému editoru Vim šanci Po několik let jsem vyzkoušel jeden textový editor jiný. Jmenoval jsem to, zkusil jsem to. Každý z těchto editorů jsem používal více než dva měsíce jako svůj primární každodenní editor. Nějak jsem ... ale Nano nano vs. vim: Editor textových editorů ve srovnání nano vs. vim: Porovnání textových editorů terminálu Ačkoli se Linux stal dostatečně snadným pro to, aby jej mohl prakticky kdokoli používat, aniž by musel terminál používat, existuje několik z nás, kteří jej pravidelně používají, nebo jsou zvědaví, jak lze ovládat ... a Gedit gedit: One Nejpoužívanějších textových editorů obyčejných textů [Linux a Windows] gedit: Jedním z nejdůležitějších textových editorů obyčejných textů [Linux a Windows] Když uvažujete o textových editorech, první věcí, která se vám může dostat do hlavy, je Windows "Poznámkový blok aplikace. Dělá přesně to, co její popis práce st ates - prosté funkce pro prostý text… jsou vynikající volbou) a přidejte následující řádky. Ujistěte se, že vytvořený soubor končí .sed.
Možná si všimnete, že ve výše uvedeném příkladu jsem se opakoval (např. S / me / Greg / a s / Me / Greg /). Je to proto, že některé verze Sedu, jako je ta, která se dodává s Mac OS X, ano ne podpora shody nerozlišující velká a malá písmena. Výsledkem je, že pro každé slovo musíme napsat dvě instrukce Sed, aby rozpoznal velká a velká písmena.
To nebude fungovat dokonale, jako byste nahradili každou instanci “Já”, “Mě”, a “Můj” ručně. Pamatujte, že to používáme pouze jako cvičení, abychom ukázali, jak můžete seskupit instrukce Sed do jednoho skriptu, a poté je provést jediným příkazem.
Pak musíme soubor vyvolat. Abychom to dokázali, spustíme tento příkaz.
kočka tom.txt | sed -f greg.sed
Pojďme zpomalit a podívejme se, co to dělá. Čtenáři s orlíma očima si všimli, že jsme ne pomocí Echo zde. Používáme Cat. Je to proto, že zatímco kočka vytiskne celý obsah souboru, echo vytiskne pouze název souboru. Také jste si všimli, že sedíme s Sedem “-F” vlajka. To říká, aby skript otevřel jako soubor.
Konečným výsledkem je toto.
Za zmínku také stojí, že Sed podporuje regulární výrazy (REGEX). Umožňují definovat vzory v textu pomocí speciální a komplikované syntaxe.
Zde je příklad, jak by to mohlo fungovat. Budeme brát výše uvedené písničky, ale pomocí regexu vytiskneme každý řádek ne začít s “Vzít”.
kočka tom.txt | sed / ^ Take / d
Sed je samozřejmě nesmírně užitečný. Ale v kombinaci s Awk je to ještě silnější.
Co je Awk?
Awk, stejně jako Sed, je programovací jazyk určený pro práci s velkými texty. Ale zatímco Sed se používá ke zpracování a úpravám textu, Awk se většinou používá jako nástroj analýza a podávání zpráv.
Stejně jako Sed byl Awk poprvé vyvinut v Bell Labs v 70. letech. Jeho název nepochází z toho, co program ano, ale spíše příjmení každého z autorů - Alfred Aho, Peter Weinberger a Brian Kernaghan.
Aplikace Awk pracuje tak, že čte textový soubor nebo vstupní proud po jednom řádku. Každý řádek je skenován, aby se zjistilo, zda odpovídá předdefinovanému vzoru. Pokud je nalezena shoda, je provedena akce.
Ale zatímco Sed a Awk mohou sdílet podobné účely, jsou to dva zcela odlišné jazyky se dvěma zcela odlišnými filozofiemi designu. Awk se blíže podobá některým jazykům obecného účelu Jak vybrat programovací jazyk, který se dnes naučíte a získat skvělou práci za 2 roky Jak vybrat programovací jazyk, který se dnes naučíte, a získat skvělou práci za 2 roky Může to trvat roky specializované práce stát se opravdu dobrým programátorem; existuje tedy způsob, jak vybrat ten pravý jazyk, který začíná od dnešního dne, aby bylo zítra najato? , jako C, Python a Bash. Má věci jako funkce a přístup podobný C ve věcech, jako je iterace a proměnné (James Bruce vysvětlil, jak funguje iterace Absolutní základy programování pro začátečníky (část 2) Absolutní základy programování pro začátečníky (část 2) zčásti 2 našeho absolutního průvodce pro začátečníky k programování, budu pokrývat základní funkce, návratové hodnoty, smyčky a podmíněné podmínky. Před zahájením řešení si přečtěte část 1, kde jsem vysvětlil ...). Jednoduše řečeno, je to spíš jako programovací jazyk.
Zkusme to. Pomocí textů Take On Me si vytiskneme všechny řádky, které jsou delší než 20 znaků.
awk 'length ($ 0)> 80' tom.txt
Další příklad jsem nestydatě vycházel z oficiální dokumentace Awk. Je to však skvělý příklad potenciálu tohoto mocného, přesto malého jazyka. Je to také skvělá demonstrace toho, jak v něm fungují věci jako iterace a proměnné. Nejprve vytvořte soubor s názvem “WordCount.awk”, a přidejte následující řádky.
pro (i = 1; i <= NF; i++) freq[$i]++
END pro (slovo ve freq) printf "% s \ t% d \ n", slovo, freq [slovo]
Uložte jej a poté spusťte pomocí následujícího příkazu.
awk -f WordCount.awk tom.txt
Super, že? Pravděpodobně si všimnete, že nejsou v žádném pořadí. Vy umět výsledky seřadí pomocí obslužného programu Unix. Ale necháme to na další den. Budeme to udržovat jednoduché.
Kombinace dvou
Awk a Sed jsou spolu neuvěřitelně silné. To lze provést pomocí unixových trubek. To jsou “|” bity mezi příkazy.
Vyzkoušejte toto: V seznamu Awk uvedeme všechny řádky v Take On Me, které mají více než 20 znaků. Pak odřízneme všechny řádky, které začínají “Vzít”. Dohromady to vypadá takto:
awk 'length ($ 0)> 20' tom.txt | sed / ^ Take / d
A produkuje toto:
Teď to otočíme. Začneme tím, že odstraníme všechny řádky, které začínají Take, a potom je posíláme do Awk, kde spočítáme, kolikrát se každé slovo objeví. Vypadá to trochu takto:
kočka tom.txt | sed / ^ Take / d | awk -f WordCount.awk
Síla Sed a Awk
Je toho tolik, co můžete vysvětlit v jediném článku. Ale doufám, že jsem ilustroval, jak nesmírně silné jsou Sed a Awk. Jednoduše řečeno, jsou to powerhouse pro zpracování textu.
Proč byste se tedy měli starat? No, kromě toho, že nikdy nevíte, kdy potřebujete provést předvídatelné, opakované změny textového dokumentu, Sed a Awk jsou skvělé pro analýzu souborů protokolu. To je zvláště užitečné, když se pokoušíte odladit problém na vašem LAMP serveru Zaregistrovat se pro webhosting pouze se SSH? Nebojte se - Snadno nainstalujte jakýkoli webový software zaregistrovaný pro webhosting pouze se SSH? Don't Worry - Snadná instalace jakéhokoli webového softwaru Neznáte první věc o operaci Linuxu prostřednictvím výkonného příkazového řádku? Už se nemusíte bát. , nebo prohlížením přístupových protokolů, abyste zjistili, zda byl váš server napaden.
Našli jste zajímavé použití pro Sed a Awk? Existují nějaké další Linuxové nástroje, o kterých si myslíte, že jsou podceňovány? Dejte mi vědět v komentářích níže a my si povídáme.