Hirdetés

A Linux egyik legkritikusabban alulbecsült segédprogramja a Sed és az Awk. Noha elismerik, hogy kissé ívesnek tűnnek, ha valaha ismételten meg kell változtatnia a nagyméretű kódot vagy szöveget, vagy ha valaha is elemeznie kell valamilyen szöveget, a Sed és az Awk felbecsülhetetlen értékűek.

Szóval mi ezek? Hogyan használják őket? És hogyan kombinálva megkönnyítik a szöveg feldolgozását?

Mi az a Sed?

sed 1971-ben fejlesztették ki Bell Labs, a legendás számítástechnikai úttörő által E. Lee McMahon.

A név jelentése stream szerkesztő, és ennyi is, amit csinál. Ez lehetővé teszi a szövegek vagy szövegrészek szerkesztését programból, egy kompakt és egyszerű, mégis Turing-complete programozási nyelven keresztül.

A működés egyszerű: a szöveget soronként egy pufferbe olvassa. Mindegyik sorhoz végrehajtja az előre meghatározott utasításokat, ahol alkalmazható.

Például, ha valaki írna egy Sed-szkriptet, amely a „sör” szót „szóda” -ra váltja fel, majd átadja egy szövegfájlban, amely az egész dalszöveg: „99 üveg sör a falon”, akkor soronként megy keresztül ezen a fájlon, és kinyomtatja a „99 üveg üdítőt a falon”, és így tovább.

instagram viewer

A legalapvetőbb Sed szkript egy Hello World. Itt az Unix Echo segédprogramot használjuk, amely csupán a karakterláncokat adja ki a „Hello World” kinyomtatásához. De ezt átvezetjük Sednek, és azt mondjuk, hogy a „Világ” helyébe „Dave” lép. Magától értetődő dolgok.

visszhang "Hello World" | sed s / világ / Dave
sedawk-dave

A Sed utasításokat fájlokba is kombinálhatja, ha valamilyen bonyolultabb szerkesztést kell végeznie. Ihlette ez a vidám Reddit szál, A dalszövegeket az A-Ha-hoz viszem Vigyél rám, és cserélje ki az „én”, „én” és „én” minden egyes példányát Gregre.

Először a dalszövegeket beillesztem egy nevű szövegfájlba tom.txt. Aztán megnyitom a preferált szövegszerkesztőt (az én a kedvenc Vim A 7 legfontosabb ok, hogy esélyt adjon a Vim szövegszerkesztőnekÉvek óta próbáltam egyik szövegszerkesztőt a másik után. Nevezted, kipróbáltam. Ezeket a szerkesztőket mindegyiknél több mint két hónapig használtam elsődleges napi szerkesztőként. Valahogy én ... Olvass tovább , de nano nano vs. vim: A terminálszöveg-szerkesztők összehasonlítvaBár a Linux eléggé egyszerűvé vált, hogy gyakorlatilag bárki használhassa, anélkül, hogy soha nem kellene a terminált használnia, vannak olyanok, akik rendszeresen használják, vagy kíváncsi vannak arra, hogyan lehet irányítani ... Olvass tovább és gedit gedit: Az egyik legjobban kitöltött egyszerű szövegszerkesztő [Linux és Windows]Ha egyszerû szövegszerkesztõkre gondol, az elsõ dolog, ami a fejedbe kerül, a Windows Jegyzettömb alkalmazás. Pontosan azt teszi, amit a munkaköri leírás állít - egyszerű szövegek jellemzői ... Olvass tovább mindkettő kiváló választás), és egészítse ki a következő sorokat. Győződjön meg arról, hogy a létrehozott fájl véget ér .sed.

sed-greg-sed

Ön észreveheti, hogy a fenti példában megismételtem magam (pl. S / me / Greg / és s / Me / Greg /). Ennek oka az, hogy a Sed egyes verziói, például a Mac OS X-rel szállított verziók nem támogatja a kis- és nagybetűk közötti érzékeny egyezést. Ennek eredményeként minden egyes szóhoz két Sed utasítást kell írnunk, így ez felismeri a nagybetűs és nem tőkésített verziót.

Ez nem fog tökéletesen működni, mintha minden „I”, „Me” és „My” példányt kézzel helyettesített volna. Ne feledje, ezt csak gyakorlatként használjuk annak bemutatására, hogy miként csoportosíthatja a Sed utasításokat egy szkriptbe, majd végrehajthatja azokat egyetlen paranccsal.

Ezután meg kell hívnunk a fájlt. Ehhez futtatjuk ezt a parancsot.

macska tom.txt | sed -f greg.sed

Lassítsuk le, és nézzük meg, mit csinál ez. A sasszemű olvasók észreveszik, hogy mi vagyunk nem itt az Echo segítségével. Macskát használunk. Ennek oka az, hogy míg a Cat a fájl teljes tartalmát kinyomtatja, addig az echo csak a fájl nevét nyomtatja ki. Azt is észrevetted, hogy Sed-et futtatjuk az „-f” zászlóval. Ez azt mondja neki, hogy nyissa meg a szkriptet fájlként.

A végeredmény ez.

sed-greg-script

Érdemes megjegyezni, hogy a Sed támogatja a reguláris kifejezéseket (REGEX). Ezek lehetővé teszik a minták meghatározását a szövegben, egy speciális és bonyolult szintaxissal.

Íme egy példa, hogy ez hogyan működhet. Fogjuk venni a fent említett dalszövegeket, de a regex használatával kinyomtathatjuk az összes sort nem kezdje a „Take” gombbal.

macska tom.txt | sed / ^ Vegye / d
sed-regex-take

Sed természetesen hihetetlenül hasznos. De még erősebb, ha Awk-vel kombinálják.

Mi az Awk?

awk, mint a Sed, egy olyan programozási nyelv, amelyet nagyméretű szövegek kezelésére terveztek. De míg a Sed szöveget dolgozza fel és módosítja, az Awk-t leginkább eszközként használják elemzés és jelentés.

Sedhez hasonlóan, az Awk-t először a Bell Labs-ban fejlesztették ki az 1970-es években. A neve nem annak a programnak a származik csinál, hanem inkább a szerzők vezetékneveit - Alfred Aho, Peter Weinberger és Brian Kernaghan.

Az Awk úgy működik, hogy egy sorban egyszerre egy szöveges fájlt vagy bemeneti adatfolyamot olvas el. Minden sort átvizsgálunk, hogy egyezzen-e egy előre meghatározott mintával. Ha talált egyezést, akkor egy műveletet hajtanak végre.

De bár Sednek és Awknak hasonló céljaik vannak, ők két teljesen különböző nyelv, két teljesen eltérő tervezési filozófiával. Awk jobban hasonlít néhányra általános célú nyelvek Hogyan válasszuk ki a programozási nyelvet, hogy ma megtanuljunk és nagyszerű munkát szerezzünk 2 év alattAz igazán jó programozóvá válás évekig elkötelezett munkát vehet igénybe; tehát van mód a megfelelő nyelv kiválasztására a mai naptól kezdve, hogy holnap felvételt kapjon? Olvass tovább , mint például a C, a Python és a Bash. Van olyan dolgok, mint a funkciók, és egy C-szerűbb megközelítés olyan dolgokhoz, mint az iteráció és a változók (James Bruce elmagyarázta, hogyan működik az iteráció A programozás abszolút alapjai kezdőknek (2. rész)A programozás abszolút kezdő útmutatójának 2. részében bemutatom a funkciók alapjait, a visszatérési értékeket, a hurkokat és a feltételt. Mielőtt ezzel foglalkozna, győződjön meg arról, hogy elolvasta az 1. részt, ahol elmagyaráztam a ... Olvass tovább ). Egyszerűen fogalmazva, ez inkább programozási nyelvnek tűnik.

Tehát próbáljuk ki. A Take On Me dalszövegekkel kinyomtatjuk az összes 20 karakternél hosszabb sort.

awk 'hossz ($ 0)> 80' tom.txt awk hosszúságú

A következő példa szégyentelenül cribbrétől az Awk hivatalos dokumentációja. De ez jó példája ennek a hatalmas, de apró nyelvnek a lehetőségeire. Ez egy nagyszerű bemutató annak is, hogy az iteráció és a változók hogyan működnek benne. Először hozzon létre egy „WordCount.awk” nevű fájlt, és adja hozzá a következő sorokat.

{mert (i = 1; i <= NF; i ++) Freq [$ i] ++ }
END {for (szó szavakkal) printf "% s \ t% d \ n", word, gyakoriság [szó] }

Mentse el, majd futtassa a következő paranccsal.

awk -f WordCount.awk tom.txt

awk-wordCount
Hűvös, igaz? Valószínűleg észreveszi, hogy nincsenek semmilyen rendben. te tud az eredményeket a Unix rendezési segédprogrammal rendezheti. De ezt egy másik napra hagyjuk. Meg fogjuk tartani egyszerűnek.

A kettő kombinálása

Az Awk és a Sed együttesen hihetetlenül nagy teljesítményű. Ezt megteheti Unix csövek használatával. Ezek a "|" bit a parancsok között.

Próbáljuk meg ezt: Az Awk használatával felsoroljuk a Take On Me összes sorát, amely több mint 20 karakterből áll. Ezután az összes vonalat, amely kezdődik, leszerezzük "Vesz". Együtt ez így néz ki:

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

És előállítja ezt:

awk hosszúságú-sed

Most nézzük meg ezt. Először eltávolítunk minden olyan sort, amely a Take-vel kezdődik, majd átvezetjük őket Awk-be, ahol kiszámoljuk, hogy hányszor jelenik meg minden szó. Kicsit így néz ki:

macska tom.txt | sed / ^ Vegye / d | awk -f WordCount.awk
awk-wordCount-sed

Sed és Awk ereje

Csak annyit tud megmagyarázni egyetlen cikkben. De remélem, megmutattam, milyen mérhetetlenül hatalmas Sed és Awk. Egyszerűen fogalmazva: ők szövegszerkesztő erőművek.

Szóval miért érdekelne? Nos, amellett, hogy soha nem tudja, mikor kell kiszámítható, ismétlődő változtatásokat végrehajtania egy szöveges dokumentumban, a Sed és az Awk kiválóan alkalmas a naplófájlok elemzésére. Ez különösen akkor hasznos, ha egy problémát próbál meg hibakeresni a LAMP szerverén Feliratkozott csak SSH-alapú webtárhelyre? Ne aggódjon - könnyedén telepíthet bármilyen webes szoftvertNem tudod az első dolgot arról, hogy a Linux a nagy teljesítményű parancssoron keresztül működik? Ne aggódj többé. Olvass tovább , vagy megnézheti a hozzáférési naplókat, hogy megbizonyosodjon arról, hogy a szervert feltörték-e.

Talált egy érdekes felhasználást Sed és Awk számára? Van-e olyan egyéb Linux segédprogram, amelyről úgy gondolja, hogy alulértékeltek? Értesítsen róla az alábbi megjegyzésekben, és beszélgetni fogunk.

Matthew Hughes szoftverfejlesztő és író, az angliai Liverpoolból. Ritkán talál egy csésze erős fekete kávé nélkül a kezében, és teljesen imádja a MacBook Pro-t és a kameráját. A blogját a következő címen olvashatja el: http://www.matthewhughes.co.uk és kövesse őt a Twitteren a @matthewhughes oldalán.