Kif tuża Espressjonijiet Awk u regolari biex tiffiltra Test jew String fil-Fajls


Meta nħaddmu ċerti kmandi f'Unix/Linux biex naqraw jew neditjaw test minn string jew fajl, ħafna drabi nippruvaw niffiltraw l-output għal sezzjoni partikolari ta 'interess. Dan huwa fejn l-użu ta 'espressjonijiet regolari jiġi utli.

Espressjoni regolari tista 'tiġi definita bħala kordi li jirrappreżentaw diversi sekwenza ta' karattri. Waħda mill-aktar affarijiet importanti dwar l-espressjonijiet regolari hija li jippermettulek tiffiltra l-output ta 'kmand jew fajl, teditja sezzjoni ta' test jew fajl ta 'konfigurazzjoni eċċ.

L-espressjonijiet regolari huma magħmula minn:

  1. Karattri ordinarji bħal spazju, underscore(_), A-Z, a-z, 0-9.
  2. Meta karattri li huma estiżi għal karattri ordinarji, jinkludu:
    1. (.) taqbel ma' kwalunkwe karattru wieħed ħlief linja ġdida.
    2. (*) taqbel ma' żero jew aktar eżistenzi tal-karattru immedjat li jkun qabel.
    3. [ karattru(i) ] taqbel ma' kwalunkwe wieħed mill-karattri speċifikati f'karattru(i), wieħed jista' juża wkoll sing (-) biex ifisser firxa ta’ karattri bħal [a-f], [1-5], eċċ.
    4. ^ taqbel mal-bidu ta' linja f'fajl.
    5. $ jaqbel mat-tmiem tal-linja f'fajl.
    6. \ huwa karattru ta' ħarba.

    Sabiex tiffiltra t-test, wieħed irid juża għodda għall-iffiltrar tat-test bħal awk. Tista 'taħseb awk bħala lingwa ta' programmar tagħha stess. Iżda għall-ambitu ta 'din il-gwida għall-użu ta' awk, aħna nkopruha bħala għodda sempliċi ta 'filtrazzjoni tal-linja tal-kmand.

    Is-sintassi ġenerali ta' awk hija:

    # awk 'script' filename
    

    Fejn script huwa sett ta' kmandi li jinftiehmu b'awk u li jiġu esegwiti fuq il-fajl, isem il-fajl.

    Taħdem billi taqra linja partikolari fil-fajl, tagħmel kopja tal-linja u mbagħad tesegwixxi l-iskrittura fuq il-linja. Dan huwa ripetut fuq il-linji kollha fil-fajl.

    L-script huwa fil-forma /pattern/ action fejn il-mudell huwa espressjoni regolari u l-azzjoni hija dak li se jagħmel awk meta jsib il-mudell mogħti f'linja.

    Kif tuża Awk Iffiltrar Għodda fil-Linux

    Fl-eżempji li ġejjin, se niffukaw fuq il-karattri meta li ddiskutejna hawn fuq taħt il-karatteristiċi ta 'awk.

    L-eżempju hawn taħt jistampa l-linji kollha fil-fajl /etc/hosts peress li ma jingħata l-ebda mudell.

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

    I l-eżempju hawn taħt, mudell localhost ingħata, għalhekk awk se jaqbel mal-linja li jkollha localhost fil-fajl /etc/hosts.

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

    Il-(.) se jaqbel ma' kordi li fihom loc, localhost, localnet fl-eżempju hawn taħt.

    Jiġifieri * l some_single_character c *.

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

    Se jaqbel ma' kordi li fihom localhost, localnet, linji, kapaċi, bħal fl-eżempju hawn taħt:

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

    Int tirrealizza wkoll li (*) jipprova jġiblek l-itwal taqbila possibbli li tista' tiskopri.

    Ejja nħarsu lejn każ li juri dan, ħu l-espressjoni regolari t*t li tfisser kordi jaqblu li jibdew bl-ittra t u jispiċċaw b't fil-linja hawn taħt:

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

    Se tikseb il-possibbiltajiet li ġejjin meta tuża l-mudell /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
    

    U (*) f'/t*t/ karattru wild card jippermetti lil awk jagħżel l-aħħar għażla:

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

    Ħu pereżempju s-sett [al1], hawnhekk awk se jaqbel mal-kordi kollha li jkun fihom il-karattru a jew l jew 1 f'linja fil-fajl /etc/hosts.

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

    L-eżempju li jmiss jaqbel ma' kordi li jibdew jew bi K jew k segwiti minn T:

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

    Ifhem karattri b'awk:

    1. [0-9] tfisser numru wieħed
    2. [a-z] tfisser li tqabbel ittra żgħira waħda
    3. [A-Z] tfisser li taqbel ma' ittra kbira waħda
    4. [a-zA-Z] tfisser tqabbel ittra waħda
    5. [a-zA-Z 0-9] tfisser li tqabbel ittra jew numru wieħed

    Ejja nħarsu lejn eżempju hawn taħt:

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

    Il-linja kollha mill-fajl /etc/hosts fiha mill-inqas numru wieħed [0-9] fl-eżempju ta' hawn fuq.

    Taqbel mal-linji kollha li jibdew bil-mudell ipprovdut bħal fl-eżempju hawn taħt:

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

    Taqbel mal-linji kollha li jispiċċaw bil-mudell ipprovdut:

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

    Jippermettilek tieħu l-karattru li jsegwih bħala litterali jiġifieri tqisu kif inhi.

    Fl-eżempju hawn taħt, l-ewwel kmand jistampa l-linja kollha fil-fajl, it-tieni kmand ma jistampa xejn għax irrid inqabbel linja li għandha $25.00, iżda ma jintuża l-ebda karattru ta 'ħarba.

    It-tielet kmand huwa korrett peress li ntuża karattru ta' ħarba biex jaqra $kif inhu.

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

    Sommarju

    Dan mhux kollox bl-għodda tal-filtrazzjoni tal-linja tal-kmand awk, l-eżempji ta 'hawn fuq l-operazzjonijiet bażiċi ta' awk. Fil-partijiet li jmiss se nkunu qed navvanzaw dwar kif nużaw karatteristiċi kumplessi ta 'awk. Grazzi talli qrajt u għal kwalunkwe żidiet jew kjarifiki, poġġi kumment fit-taqsima tal-kummenti.