Az Awk és a reguláris kifejezések használata szöveg vagy karakterlánc szűrésére a fájlokban
Amikor Unix/Linux rendszerben bizonyos parancsokat futtatunk, hogy szöveget olvassunk vagy szerkeszthessünk egy karakterláncból vagy fájlból, legtöbbször megpróbáljuk a kimenetet egy adott érdeklődési területre szűrni. Itt jön jól a reguláris kifejezések használata.
Olvassa el még: 10 hasznos Linux-láncoló operátor gyakorlati példákkal
Mik azok a reguláris kifejezések?
A reguláris kifejezés definiálható olyan karakterláncként, amely több karaktersorozatot képvisel. A reguláris kifejezésekkel kapcsolatos egyik legfontosabb dolog az, hogy lehetővé teszik egy parancs vagy fájl kimenetének szűrését, egy szöveg- vagy konfigurációs fájl egy részének szerkesztését és így tovább.
A reguláris kifejezés jellemzői
A reguláris kifejezések a következőkből állnak:
- Közönséges karakterek, például szóköz, aláhúzás (_), A-Z, a-z, 0-9.
A közönséges karakterekre bővített metakarakterek a következők:
(.)
bármilyen karakterrel megegyezik, kivéve az újsort.
(*)
az őt megelőző közvetlen karakter nulla vagy több létezésének felel meg.[ karakter(ek) ]
a karakter(ek)ben megadott karakterek bármelyikével egyezik, használhatunk egy kötőjelet is(-)
, amely olyan karaktertartományt jelent, mint pl. mint[a-f]
,[1-5]
és így tovább.^
egy fájl sor elejére egyezik.- A
$
megegyezik a fájl sorának végével. \
ez egy escape karakter.
A szöveg szűréséhez olyan szövegszűrő eszközt kell használni, mint az awk. Az awkra önálló programozási nyelvként gondolhat. Ennek az awk használatára vonatkozó útmutatónak a terjedelmét illetően azonban egy egyszerű parancssori szűrőeszközként fogunk foglalkozni vele.
Az awk általános szintaxisa a következő:
awk 'script' filename
Ahol a 'script'
olyan parancsok halmaza, amelyeket az awk ért, és amelyeket a fájlon, fájlnéven hajtanak végre.
Úgy működik, hogy beolvas egy adott sort a fájlban, másolatot készít a sorról, majd végrehajtja a parancsfájlt a sorban. Ez megismétlődik a fájl összes sorában.
A 'script'
formátuma '/pattern/ action'
, ahol a pattern egy reguláris kifejezés, az action pedig > ezt fogja tenni az awk, ha megtalálja az adott mintát egy sorban.
Az Awk szűrőeszköz használata Linuxban
A következő példákban azokra a metakarakterekre fogunk összpontosítani, amelyeket fentebb az awk jellemzői alatt tárgyaltunk.
Egy egyszerű példa az awk használatára:
Az alábbi példa az /etc/hosts fájl összes sorát kinyomtatja, mivel nincs megadva minta.
awk '//{print}'/etc/hosts
Az awk használata mintával:
Az alábbi példában egy localhost
minta van megadva, így az awk megfelel a localhost sornak a /etc/hosts
fájlban.
awk '/localhost/{print}' /etc/hosts
Az Awk használata (.) helyettesítő karakterrel a mintában
Az alábbi példában a (.)
megfelel a loc, localhost, localnet karakterláncoknak.
Vagyis * l some_single_character c *.
awk '/l.c/{print}' /etc/hosts
Az Awk használata (*) karakterrel egy mintában
Megfelel a localhost, localnet, lines, capable karakterláncoknak, mint az alábbi példában:
awk '/l*c/{print}' /etc/localhost
Azt is észre fogja venni, hogy a (*)
a lehető leghosszabb egyezést próbálja megtalálni.
Nézzünk egy esetet, amely ezt szemlélteti, vegyük a t*t
reguláris kifejezést, amely a t
betűvel kezdődő és t
-re végződő karakterláncokat jelenti. az alábbi sorban:
this is tecmint, where you get the best good tutorials, how to's, guides, tecmint.
A következő lehetőségeket kapja, ha a /t*t/
mintát használja:
this is t
this is tecmint
this is tecmint, where you get t
this is tecmint, where you get the best good t
this is tecmint, where you get the best good tutorials, how t
this is tecmint, where you get the best good tutorials, how tos, guides, t
this is tecmint, where you get the best good tutorials, how tos, guides, tecmint
És a (*)
a /t*t/
helyettesítő karakterben lehetővé teszi az awk számára, hogy az utolsó lehetőséget válassza:
this is tecmint, where you get the best good tutorials, how to's, guides, tecmint
Az Awk használata a [ karakter(ek) ] készlettel
Vegyük például a [al1]
halmazt, itt az awk minden olyan karakterláncot fog egyezni, amely a
vagy l
vagy 1
karaktert tartalmaz. a /etc/hosts fájl egy sorában.
awk '/[al1]/{print}' /etc/hosts
A következő példa a K
vagy a k
karakterláncokkal kezdődő karakterláncokra egyezik, amelyeket a T
követ:
awk '/[Kk]T/{print}' /etc/hosts
Karakterek megadása egy tartományban
Az awk karakterek megértése:
- A
[0-9]
egyetlen számot jelent - Az
[a-z]
azt jelenti, hogy egyetlen kisbetűre egyezik - A
[A-Z]
azt jelenti, hogy egyetlen nagybetűre egyezik - Az
[a-zA-Z]
azt jelenti, hogy egyetlen betűre egyezik [a-zA-Z 0-9]
azt jelenti, hogy egyetlen betűre vagy számra egyezik
Nézzünk egy példát alább:
awk '/[0-9]/{print}' /etc/hosts
A fenti példában az /etc/hosts fájl összes sora legalább egy [0-9]
számot tartalmaz.
Az Awk használata (^) metakarakterrel
Megfelel az összes olyan sornak, amely az alábbi példában megadott mintával kezdődik:
awk '/^fe/{print}' /etc/hosts
awk '/^ff/{print}' /etc/hosts
Az Awk használata ($) metakarakterrel
Az összes olyan sorhoz illeszkedik, amely a megadott mintával végződik:
awk '/ab$/{print}' /etc/hosts
awk '/ost$/{print}' /etc/hosts
awk '/rs$/{print}' /etc/hosts
Az Awk használata (\) Escape karakterrel
Lehetővé teszi, hogy az őt követő karaktert szó szerint vegye fel, vagyis tekintse úgy, ahogy van.
Az alábbi példában az első parancs kinyomtatja a fájl összes sorát, a második parancs nem ír ki semmit, mert olyan sort akarok egyeztetni, amelyben 25,00 USD van, de nem használ escape karaktert.
A harmadik parancs helyes, mivel egy escape karaktert használtak a $ olvasásához úgy, ahogy van.
awk '//{print}' deals.txt
awk '/$25.00/{print}' deals.txt
awk '/\$25.00/{print}' deals.txt
Összegzés
Ez még nem minden az awk parancssori szűrőeszközzel, a fenti példák az awk alapvető műveletei. A következő részekben az awk összetett funkcióinak használatáról fogunk haladni. Köszönjük, hogy végigolvasta, és ha bármilyen kiegészítést vagy pontosítást ad, írjon megjegyzést a megjegyzés rovatba.