Kuidas kasutada failides teksti või stringe Awk ja regulaaravaldisi


Kui käivitame Unixis/Linuxis teatud käske stringi või faili teksti lugemiseks või redigeerimiseks, proovime enamasti väljundi filtreerida antud huvipakkuvasse sektsiooni. Siin on regulaaravaldiste kasutamine kasuks.

Regulaaravaldise võib määratleda stringidena, mis tähistavad mitut tähemärkide järjestust. Regulaaravaldiste üks olulisemaid asju on see, et need võimaldavad teil käsu või faili väljundit filtreerida, teksti- või konfiguratsioonifaili osa redigeerida ja nii edasi.

Regulaaravaldised on tehtud:

  1. Tavalised tähemärgid, nagu tühik, alakriips (_), A-Z, a-z, 0–9.
  2. Tavaliste tähemärkidena laiendatud metamärgid hõlmavad järgmist:
    1. (.) see sobib mis tahes üksikmärgiga, välja arvatud uus rida.
    2. (*) see vastab nullile või enamale sellele eelnenud vahetult tähemärgilt.
    3. [märk (id)] see sobib mis tahes tähemärki (de) s tähistatud tähemärgiga, vahemiku tähistamiseks võib kasutada ka sidekriipsu (-) tähemärke nagu [af] , [1-5] ja nii edasi.
    4. ^ see sobib faili rea algusega.
    5. $ vastab faili rea lõpule.
    6. \ see on põgenemismärk.

    Teksti filtreerimiseks tuleb kasutada teksti filtreerimise tööriista, näiteks awk. Võite mõelda awkist kui omaette programmeerimiskeelest. Kuid selle juhendi ulatusest awk kasutamise kohta käsitleme seda lihtsa käsurea filtreerimise tööriistana.

    Awk üldine süntaks on:

    # awk 'script' filename
    

    Kui skript on käskude kogum, mida awk mõistab ja täidetakse failis, failinimi.

    See töötab nii, et loeb failis antud rea, teeb reast koopia ja käivitab seejärel reale skripti. Seda korratakse faili kõigil ridadel.

    skript on kujul /pattern/action , kus muster on regulaarne avaldis ja tegevus on see, mida awk teeb, kui leiab antud mustri reast.

    Kuidas Awki filtreerimistööriista Linuxis kasutada

    Järgnevates näidetes keskendume metakujunditele, mida arutasime eespool awk funktsioonide all.

    Allpool olev näide prindib kõik read failis/etc/hosts, kuna mustrit pole antud.

    # awk '//{print}'/etc/hosts
    

    Allpool toodud näites on antud muster localhost , seega sobib awk reaga, millel on localhost failis /etc/hosts .

    # awk '/localhost/{print}' /etc/hosts 
    

    (.) sobib allpool toodud näites stringidega, mis sisaldavad loc, localhost, localnet.

    See tähendab, et * l mõned_ühemärgid c *.

    # awk '/l.c/{print}' /etc/hosts
    

    See sobib stringidega, mis sisaldavad localhost, localnet, read, mis on võimelised, nagu allpool toodud näites:

    # awk '/l*c/{print}' /etc/localhost
    

    Samuti mõistate, et (*) püüab teile võimalikult pikka vastet tuvastada.

    Vaadakem seda näitavat juhtumit, võtke regulaarne avaldis t * t , mis tähendab vaste stringe, mis algavad tähega t ja lõpevad tähega t alloleval real:

    this is tecmint, where you get the best good tutorials, how to's, guides, tecmint. 
    

    Mustri /t * t/ kasutamisel saate järgmised võimalused:

    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 (*) /t * t/ metamärgis võimaldab awk-l valida viimase valiku:

    this is tecmint, where you get the best good tutorials, how to's, guides, tecmint
    

    Võtame näiteks komplekti [al1] , siin sobivad awk kõik stringid, mis sisaldavad märki a või l või 1 reas failis/etc/hosts.

    # awk '/[al1]/{print}' /etc/hosts
    

    Järgmine näide vastab stringidele, mis algavad kas K või k , millele järgneb T :

    # awk '/[Kk]T/{print}' /etc/hosts 
    

    Mõista awk-ga märke:

    1. [0-9] tähendab ühte numbrit
    2. [a-z] tähendab, et see sobiks ühe väiketähega
    3. [A-Z] tähendab, et see sobib kokku ühe suure algustähega
    4. [a-zA-Z] tähendab ühe tähe sobitamist
    5. [a-zA-Z 0-9] tähendab, et need peavad vastama ühele tähele või numbrile

    Vaatame allpool toodud näidet:

    # awk '/[0-9]/{print}' /etc/hosts 
    

    Kogu faili/etc/hosts rida sisaldab ülaltoodud näites vähemalt ühte numbrit [0-9] .

    See sobib kõigi joontega, mis algavad allpool toodud näites toodud mustriga:

    # awk '/^fe/{print}' /etc/hosts
    # awk '/^ff/{print}' /etc/hosts
    

    See sobib kõigi antud mustriga lõppevate joontega:

    # awk '/ab$/{print}' /etc/hosts
    # awk '/ost$/{print}' /etc/hosts
    # awk '/rs$/{print}' /etc/hosts
    

    See võimaldab teil võtta seda järgivat tegelast sõnasõnalisena, st arvestada sellega just sellisena, nagu ta on.

    Allpool toodud näites prindib esimene käsk kogu faili rida, teine käsk ei prindi midagi, sest ma tahan sobitada rea, millel on 25,00 dollarit, kuid põgenemismärki ei kasutata.

    Kolmas käsk on õige, kuna põgenemismärki on kasutatud $-i lugemiseks sellisena, nagu see on.

    # awk '//{print}' deals.txt
    # awk '/$25.00/{print}' deals.txt
    # awk '/\$25.00/{print}' deals.txt
    

    Kokkuvõte

    See pole veel kõik käsurea filtreerimise tööriista awk puhul, ülaltoodud näited on awki põhitoimingud. Järgmistes osades käsitleme awk keerukate funktsioonide kasutamist. Täname läbi lugemise ja kõigi täienduste või täpsustuste eest, postitage kommentaaride jaotisse kommentaar.