reklama

Dva z nejvíce kriminálně podceňovaných linuxových utilit jsou Sed a Awk. I když se to může zdát trochu tajemné, pokud musíte někdy provést opakující se změny velkých kusů kódu nebo textu, nebo pokud jste někdy museli analyzovat nějaký text, Sed a Awk jsou neocenitelné.

Co jsou tedy? Jak se používají? A jak, když se spojí dohromady, usnadní zpracování textu?

Co je Sed?

Sed byl vyvinut v roce 1971 v Bell Labs, legendárním průkopníkem v oblasti výpočetní techniky Lee E. McMahon.

Název znamená editor proudua to je vlastně to, co dělá. Umožňuje editovat těla nebo proudy textu programově, prostřednictvím kompaktního a jednoduchého, ale 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 předdefinované pokyny pro každý řádek.

Například, pokud někdo měl napsat Sed skript, který nahradil slovo „pivo“ za „soda“, a pak předal textový soubor, který obsahoval celý texty na „99 lahví piva na zdi“, prošel by tímto souborem řádek po řádku a vytiskl „99 lahví sody na zdi“, a tak na.

instagram viewer

Nejzákladnější skript Sed je Hello World. Zde používáme nástroj Unix Echo, který pouze vytváří řetězce, k tisku „Hello World“. Ale dáme to Sedovi a řekneme mu, aby nahradil „Svět“ za „Dave”. Samovysvětlující věci.

echo "Ahoj svět" sed s / world / Dave
sedawk-dave

Můžete také zkombinovat instrukce Sed do souborů, pokud potřebujete provést komplikovanější úpravy. Inspirovaný tato veselá nit Reddit, Budu brát texty do A-Ha's Vezmi si měa nahraďte každou instanci „I“, „Já“ a „Moje“ 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 editoru Vim šanciCelá léta jsem zkoušel jeden textový editor za druhým. Jmenuješ 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 ... Přečtěte si více , ale Nano nano vs. vim: Porovnány textové editory termináluAčkoli se Linux stal dostatečně snadným pro to, aby ho prakticky kdokoli mohl 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 ... Přečtěte si více a Gedite gedit: Jeden z nejdůležitějších textových editorů s plnými funkcemi [Linux a Windows]Když si vzpomenete na prostý textový editor, první věcí, která se vám může dostat do hlavy, je aplikace Poznámkový blok systému Windows. Dělá přesně to, co uvádí její popis úlohy - prosté funkce pro prostý text ... Přečtěte si více jsou vynikající možnosti) a přidejte následující řádky. Ujistěte se, že vytvořený soubor končí .sed.

sed-greg-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, takže rozpozná velká a velká písmena.

To nebude fungovat dokonale, jako by jste ručně nahradili každou instanci „já“, „já“ a „moje“. 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 provozujeme s příznakem „-f“. To říká, aby skript otevřel jako soubor.

Konečným výsledkem je toto.

sed-greg-script

Rovněž stojí za zmínku, ž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 zmíněné texty písní, ale pomocí regexu vytiskneme každý řádek ne začněte „Take“.

kočka tom.txt | sed / ^ Take / d
sed-regex-take

Sed je samozřejmě neuvěřitelně 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 příjmení každého z autorů - Alfred Aho, Peter Weinberger a Brian Kernaghan.

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, jedná se o dva zcela odlišné jazyky se dvěma zcela odlišnými filozofiemi designu. Awk se blíže podobá některým univerzální jazyky Jak si vybrat programovací jazyk, který se dnes naučíte, a získat skvělou práci za 2 rokyStát se skutečně dobrým programátorem může trvat roky oddané práce; existuje tedy způsob, jak si vybrat ten pravý jazyk, který začíná od dnešního dne, aby se zítra najal? Přečtěte si více , jako C, Python a Bash. Má věci jako funkce a přístup podobný C ve věcech, jako jsou iterace a proměnné (James Bruce vysvětlil, jak iterace funguje Absolutní základy programování pro začátečníky (část 2)V části 2 našeho průvodce pro absolutní začátečníky k programování se budu věnovat základům funkcí, návratových hodnot, smyček a podmíněností. Před vyřešením tohoto problému si přečtěte část 1, kde jsem vysvětlil ... Přečtěte si více ). 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 neohrabaná délka

Další příklad jsem nestydatě postoupil od 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á ukázka toho, jak v ní 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

awk-wordcount
Super, že? Pravděpodobně si všimnete, že nejsou v žádném pořadí. Vy umět výsledky třídit pomocí obslužného programu Unix sort. 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.

Zkusme to: Jdeme na seznam všech řádků v Take On Me, které mají více než 20 znaků, pomocí Awk. 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:

awk-length-sed

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
awk-wordcount-sed

Síla Sed a Awk

Je toho tolik, co můžete vysvětlit v jednom článku. Ale doufám, že jsem ilustroval, jak nesmírně silné jsou Sed a Awk. Jednoduše řečeno, jedná se o 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, jsou Sed a Awk skvělé pro analýzu souborů protokolu. To je zvláště užitečné, když se pokoušíte ladit problém na vašem LAMP serveru Zaregistrovali jste se pouze pro webhosting SSH? Nebojte se - snadno nainstalujte jakýkoli webový softwareNevíte první o operaci Linuxu pomocí jeho výkonného příkazového řádku? Už se nemusíte bát. Přečtěte si více , 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 nám vědět v komentářích níže a my si povídáme.

Matthew Hughes je vývojář a spisovatel softwaru z anglického Liverpoolu. Málokdy je nalezen bez šálku silné černé kávy v ruce a absolutně zbožňuje svůj Macbook Pro a fotoaparát. Jeho blog si můžete přečíst na adrese http://www.matthewhughes.co.uk a následujte ho na twitteru na @ matthewhughes.