Awk- ja säännöllisten lausekkeiden käyttäminen tekstin tai merkkijonon suodattamiseen tiedostoissa
Kun suoritamme tiettyjä komentoja Unixissa/Linuxissa tekstin lukemiseksi tai muokkaamiseksi merkkijonosta tai tiedostosta, yritämme useimmiten suodattaa tulosteen tiettyyn kiinnostavaan osaan. Tässä kohtaa säännöllisten lausekkeiden käyttö on kätevää.
Lue myös: 10 hyödyllistä Linuxin ketjutusoperaattoria käytännön esimerkkeineen
Mitä ovat säännölliset lausekkeet?
Säännöllinen lauseke voidaan määritellä merkkijonoksi, joka edustaa useita merkkijonoja. Yksi tärkeimmistä asioista säännöllisissä lausekkeissa on, että niiden avulla voit suodattaa komennon tai tiedoston tulosteen, muokata teksti- tai asetustiedoston osaa ja niin edelleen.
Säännöllisen lausekkeen ominaisuudet
Säännölliset lausekkeet koostuvat seuraavista:
- Tavalliset merkit, kuten välilyönti, alaviiva(_), A-Z, a-z, 0-9.
Metahahmot, jotka on laajennettu tavallisiksi hahmoiksi. Niihin kuuluvat:
(.)
se vastaa mitä tahansa yksittäistä merkkiä rivinvaihtoa lukuun ottamatta.
(*)
se vastaa nollaa tai useampaa sitä edeltävän merkin olemassaoloa.[ merkki(t) ]
se vastaa mitä tahansa merkissä määritellyistä merkeistä, voidaan myös käyttää yhdysviivaa(-)
tarkoittamaan merkkialuetta, kuten kuten[a-f]
,[1-5]
ja niin edelleen.^
se vastaa tiedoston rivin alkua.$
vastaa tiedoston rivin loppua.\
se on pakomerkki.
Tekstin suodattamiseksi on käytettävä tekstinsuodatustyökalua, kuten awk. Voit ajatella awka omana ohjelmointikielenä. Mutta tämän awk-käyttöoppaan laajuudessa käsittelemme sitä yksinkertaisena komentorivin suodatustyökaluna.
Awk:n yleinen syntaksi on:
awk 'script' filename
Missä 'script'
on joukko komentoja, jotka awk ymmärtää ja jotka suoritetaan tiedostossa, tiedostonimessä.
Se toimii lukemalla tietyn rivin tiedostossa, tekee rivistä kopion ja suorittaa sitten komentosarjan rivillä. Tämä toistetaan kaikilla tiedoston riveillä.
'script'
on muodossa '/pattern/ action'
, jossa pattern on säännöllinen lauseke ja toiminto > on mitä awk tekee, kun se löytää annetun kuvion riviltä.
Awk-suodatustyökalun käyttäminen Linuxissa
Seuraavissa esimerkeissä keskitymme metamerkkeihin, joista keskustelimme edellä awk:n ominaisuuksien alla.
Yksinkertainen esimerkki awk:n käytöstä:
Alla oleva esimerkki tulostaa kaikki tiedoston /etc/hosts rivit, koska kuviota ei anneta.
awk '//{print}'/etc/hosts
Käytä awkia kuvion kanssa:
Alla olevassa esimerkissä on annettu malli localhost
, joten awk vastaa riviä, jolla on localhost /etc/hosts
-tiedostossa.
awk '/localhost/{print}' /etc/hosts
Awk:n käyttäminen jokerikortin (.) kanssa kuviossa
(.)
vastaa alla olevassa esimerkissä merkkijonoja, jotka sisältävät loc, localhost ja localnet.
Eli * l some_single_character c *.
awk '/l.c/{print}' /etc/hosts
Awkin käyttäminen kuviossa (*)-merkin kanssa
Se vastaa merkkijonoja, jotka sisältävät localhost, localnet, lines, capable, kuten alla olevassa esimerkissä:
awk '/l*c/{print}' /etc/localhost
Ymmärrät myös, että (*)
yrittää löytää sinulle pisimmän mahdollisen vastaavuuden, jonka se voi havaita.
Katsotaanpa tapausta, joka osoittaa tämän. Otetaan säännöllinen lauseke t*t
, joka tarkoittaa hakumerkkijonoja, jotka alkavat kirjaimella t
ja päättyvät t
alla olevalla rivillä:
this is tecmint, where you get the best good tutorials, how to's, guides, tecmint.
Saat seuraavat mahdollisuudet, kun käytät kaavaa /t*t/
:
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
Ja (*)
jokerimerkissä /t*t/
sallii awk:n valita viimeisen vaihtoehdon:
this is tecmint, where you get the best good tutorials, how to's, guides, tecmint
Awkin käyttäminen joukon [ merkki(t) ] kanssa
Otetaan esimerkiksi joukko [al1]
, tässä awk vastaa kaikkia merkkijonoja, jotka sisältävät merkin a
tai l
tai 1
tiedoston /etc/hosts rivillä.
awk '/[al1]/{print}' /etc/hosts
Seuraava esimerkki vastaa merkkijonoja, jotka alkavat kirjaimella K
tai k
, jota seuraa T
:
awk '/[Kk]T/{print}' /etc/hosts
Merkkien määrittäminen alueella
Ymmärrä merkkejä awk:lla:
[0-9]
tarkoittaa yhtä numeroa[a-z]
tarkoittaa, että vastaa yhtä pientä kirjainta[A-Z]
tarkoittaa, että vastaa yhtä isoa kirjainta[a-zA-Z]
tarkoittaa yhtä kirjainta[a-zA-Z 0-9]
tarkoittaa yhtä kirjainta tai numeroa
Katsotaanpa esimerkkiä alla:
awk '/[0-9]/{print}' /etc/hosts
Kaikki tiedoston /etc/hosts rivit sisältävät vähintään yhden numeron [0-9]
yllä olevassa esimerkissä.
Käytä Awkia (^) metamerkin kanssa
Se vastaa kaikkia rivejä, jotka alkavat alla olevan esimerkin mukaisella kuviolla:
awk '/^fe/{print}' /etc/hosts
awk '/^ff/{print}' /etc/hosts
Käytä Awkia ($) metamerkin kanssa
Se vastaa kaikkia rivejä, jotka päättyvät annettuun kuvioon:
awk '/ab$/{print}' /etc/hosts
awk '/ost$/{print}' /etc/hosts
awk '/rs$/{print}' /etc/hosts
Käytä Awk-näppäintä ja (\) Esc-merkkiä
Sen avulla voit ottaa sitä seuraavan hahmon kirjaimellisena eli pitää sitä sellaisena kuin se on.
Alla olevassa esimerkissä ensimmäinen komento tulostaa tiedoston kaikki rivit, toinen komento ei tulosta mitään, koska haluan täsmäyttää rivin, jossa on $25,00, mutta jossa ei käytetä estomerkkiä.
Kolmas komento on oikea, koska koodin $ lukemiseen on käytetty estomerkkiä sellaisenaan.
awk '//{print}' deals.txt
awk '/$25.00/{print}' deals.txt
awk '/\$25.00/{print}' deals.txt
Yhteenveto
Tässä ei vielä kaikki awk-komentorivisuodatustyökalussa, yllä olevissa esimerkeissä awk:n perustoiminnot. Seuraavissa osissa jatkamme awkin monimutkaisten ominaisuuksien käyttöä. Kiitos, että luit läpi ja lisäykset tai selvennykset, lähetä kommentti kommenttiosiossa.