Hvernig á að nota Awk og venjuleg tjáning til að sía texta eða streng í skrár


Þegar við keyrum ákveðnar skipanir í Unix/Linux til að lesa eða breyta texta úr streng eða skrá, reynum við oftast að sía úttak í tiltekinn hluta af áhuga. Þetta er þar sem notkun reglulegra tjáninga kemur sér vel.

Regluleg tjáning er hægt að skilgreina sem strengi sem tákna nokkrar röð stafa. Eitt af því mikilvægasta við reglubundnar tjáningar er að þær leyfa þér að sía úttak skipunar eða skráar, breyta hluta af texta eða stillingarskrá og svo framvegis.

Regluleg orðtök eru gerð úr:

  1. Venjulegir stafir eins og bil, undirstrik(_), A-Ö, a-ö, 0-9.
  2. Metastafir sem eru stækkaðir í venjulega stafi, þeir innihalda:
    1. (.) það passar við hvern einasta staf nema nýlínu.
    2. (*) það passar við núll eða fleiri tilvistar staf sem er á undan því.
    3. [ stafi(r) ] það passar við hvern sem er af þeim stöfum sem tilgreindir eru í stöfum, einnig er hægt að nota bandstrik (-) til að þýða bil af stöfum eins og [a-f], [1-5] og svo framvegis.
    4. ^ það passar við upphaf línu í skrá.
    5. $ passar við lok línu í skrá.
    6. \ það er escape-stafur.

    Til þess að sía texta verður maður að nota textasíunartæki eins og awk. Þú getur hugsað um awk sem sitt eigið forritunarmál. En fyrir umfang þessarar handbókar um notkun awk, munum við fjalla um það sem einfalt skipanalínusíutól.

    Almenn setningafræði awk er:

    # awk 'script' filename
    

    Þar sem script er sett af skipunum sem skiljast af awk og eru keyrðar á skrá, skráarnafn.

    Það virkar með því að lesa tiltekna línu í skránni, gerir afrit af línunni og keyrir síðan handritið á línunni. Þetta er endurtekið á öllum línum í skránni.

    handritið er á formi /pattern/ action þar sem mynstur er regluleg tjáning og aðgerðin er það sem awk mun gera þegar það finnur tiltekið mynstur í línu.

    Hvernig á að nota Awk Filtering Tool í Linux

    Í eftirfarandi dæmum munum við einbeita okkur að meta persónunum sem við ræddum hér að ofan undir eiginleikum awk.

    Dæmið hér að neðan prentar allar línur í skránni /etc/hosts þar sem ekkert mynstur er gefið upp.

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

    Í dæminu hér að neðan, mynstur localhost hefur verið gefið, svo awk mun passa við línu með localhost í /etc/hosts skránni.

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

    (.) mun passa við strengi sem innihalda loc, localhost, localnet í dæminu hér að neðan.

    Það er að segja * l einhver_einn_stafur c *.

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

    Það mun passa við strengi sem innihalda localhost, localnet, lines, capable, eins og í dæminu hér að neðan:

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

    Þú munt líka átta þig á því að (*) reynir að fá þér sem lengsta samsvörun sem það getur greint.

    Skoðaðu tilfelli sem sýnir þetta, taktu reglulegu tjáninguna t*t sem þýðir samsvarandi strengi sem byrja á bókstafnum t og enda á t í línunni fyrir neðan:

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

    Þú færð eftirfarandi möguleika þegar þú notar mynstur /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
    

    Og (*) í /t*t/ jokertákn gerir awk kleift að velja síðasta valmöguleikann:

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

    Tökum sem dæmi settið [al1], hér mun awk passa við alla strengi sem innihalda stafina a eða l eða 1 í línu í skránni /etc/hosts.

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

    Næsta dæmi passar við strengi sem byrja á annað hvort K eða k og síðan T:

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

    Skildu stafi með awk:

    1. [0-9] þýðir eitt númer
    2. [a-z] þýðir að passa við einn lágstaf
    3. [A-Z] þýðir að passa við einn hástaf
    4. [a-zA-Z] þýðir að passa við einn staf
    5. [a-zA-Z 0-9] þýðir að passa við einn staf eða tölu

    Við skulum skoða dæmi hér að neðan:

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

    Öll línan úr skránni /etc/hosts inniheldur að minnsta kosti eina tölu [0-9] í dæminu hér að ofan.

    Það passar við allar línur sem byrja með mynstrinu sem fylgir eins og í dæminu hér að neðan:

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

    Það passar við allar línur sem enda með mynstrinu sem fylgir með:

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

    Það gerir þér kleift að taka persónuna sem fylgir henni sem bókstaflega, það er að segja líta á hana eins og hún er.

    Í dæminu hér að neðan prentar fyrsta skipunin út allar línur í skránni, önnur skipunin prentar ekkert út vegna þess að ég vil passa línu sem hefur $25.00, en enginn escape-stafur er notaður.

    Þriðja skipunin er rétt þar sem escape-stafur hefur verið notaður til að lesa $eins og hann er.

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

    Samantekt

    Það er ekki allt með awk skipanalínusíutólinu, dæmin hér að ofan eru grunnaðgerðir awk. Í næstu hlutum munum við halda áfram að nota flókna eiginleika awk. Takk fyrir að lesa í gegnum og fyrir allar viðbætur eða skýringar, skrifaðu athugasemd í athugasemdahlutanum.