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:
- Venjulegir stafir eins og bil, undirstrik(_), A-Ö, a-ö, 0-9.
- Metastafir sem eru stækkaðir í venjulega stafi, þeir innihalda:
(.)
það passar við hvern einasta staf nema nýlínu.(*)
það passar við núll eða fleiri tilvistar staf sem er á undan því.[ 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.^
það passar við upphaf línu í skrá.$
passar við lok línu í skrá.\
þ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ókstafnumt
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 stafinaa
eðal
eða1
í línu í skránni /etc/hosts.# awk '/[al1]/{print}' /etc/hosts
Næsta dæmi passar við strengi sem byrja á annað hvort
K
eðak
og síðanT
:# awk '/[Kk]T/{print}' /etc/hosts
Skildu stafi með awk:
[0-9]
þýðir eitt númer[a-z]
þýðir að passa við einn lágstaf[A-Z]
þýðir að passa við einn hástaf[a-zA-Z]
þýðir að passa við einn staf[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.