Faýllarda teksti ýa-da setiri süzmek üçin awk we yzygiderli aňlatmalary nädip ulanmaly
Unix/Linux-da tekstden ýa-da faýldan teksti okamak ýa-da redaktirlemek üçin käbir buýruklary işledenimizde, köplenç çykyşyň belli bir bölegine filtrlemäge synanyşýarys. Ynha, yzygiderli aňlatmalary ulanmak amatly bolýar.
Yzygiderli aňlatma, nyşanlaryň yzygiderliligini görkezýän setirler hökmünde kesgitlenip bilner. Yzygiderli aňlatmalar barada iň möhüm zatlaryň biri, buýrugyň ýa-da faýlyň çykyşyny süzmäge, tekstiň ýa-da konfigurasiýa faýlynyň bir bölümini redaktirlemäge we ş.m.
Yzygiderli aňlatmalar:
- Kosmos, aşaky çyzyk (_), A-Z, a-z, 0-9 ýaly adaty nyşanlar.
- Adaty nyşanlara giňeldilen meta nyşanlary, aşakdakylary öz içine alýar:
-
(.)
täze setirden başga islendik nyşanlara gabat gelýär. -
(*)
ondan öňki nyşanlaryň nol ýa-da has köp barlygyna gabat gelýär. -
[a-f]
,[1-5]
we ş.m. ýaly nyşanlaryň^
faýldaky setiriň başyna gabat gelýär.$
faýlyň setiriniň soňuna gabat gelýär.\
bu gaçmak nyşanydyr.
Teksti süzmek üçin awk ýaly tekst süzgüç guralyny ulanmaly. Awk-yň öz programmirleme dili hökmünde pikir edip bilersiňiz. Awöne bu gollanmanyň awk ulanmak üçin, ýönekeý buýruk setirini süzmek guraly hökmünde ýaparys.
Awk-iň umumy sintaksisi:
# awk 'script' filename
Bu ýerde
skript
awk tarapyndan düşünilýän we faýlda, faýlyň adynda ýerine ýetirilýän buýruklar toplumydyr.Faýlda berlen setiri okamak bilen işleýär, setiriň göçürmesini edýär we setirdäki ýazgyny ýerine ýetirýär. Bu faýlyň ähli setirlerinde gaýtalanýar.
skript
/pattern/action
görnüşinde, bu ýerde nagyş yzygiderli aňlatma bolup durýar we berlen nagşy bir setirde tapanda hereket näme eder.Linux-da awk süzgüç guralyny nädip ulanmaly
Aşakdaky mysallarda ýokarda ara alyp maslahatlaşan meta nyşanlarymyza üns bereris.
Aşakdaky mysal, hiç hili nagyş berilmänsoň/etc/host faýlyndaky ähli setirleri çap edýär.
# awk '//{print}'/etc/hosts
Aşakdaky mysal,
localhost
nagşy berildi, şonuň üçin awk/etc/host
faýlynda ýerlihost bolan setire gabat gelýär.# awk '/localhost/{print}' /etc/hosts
(.)
aşakdaky mysalda ýerli, ýerlihost, ýerli seti öz içine alýan setirlere gabat geler.* Agny, * l käbir_single_ häsiýet c * diýmekdir.
# awk '/l.c/{print}' /etc/hosts
Aşakdaky mysalda bolşy ýaly, ýerlihost, ýerlinet, setirleri öz içine alýan setirlere gabat geler:
# awk '/l*c/{print}' /etc/localhost
Şeýle hem,
(*)
kesgitläp boljak iň uzyn oýny tapmaga synanyşýandygyna düşünersiňiz.Muny görkezýän bir meselä seredeliň,
t
harpy bilen başlaýan wet
bilen gutarýan yzygiderli setirleri aňladýant * t
alyň. aşakdaky setirde:this is tecmint, where you get the best good tutorials, how to's, guides, tecmint.
/t * t/
nusgasyny ulananyňyzda aşakdaky mümkinçilikleri alarsyňyz: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
We
/t * t/
ýabany kartoçkadaky(*)
iň soňky warianty saýlamaga mümkinçilik berýär:this is tecmint, where you get the best good tutorials, how to's, guides, tecmint
Mysal üçin,
[al1]
toplumyny alalyň, bu ýerde awka
ýa-dal
ýa-da1
nyşanlary bolan ähli setirlere gabat geler./etc/hostlar faýlynda bir setirde.# awk '/[al1]/{print}' /etc/hosts
Indiki mysal
K
ýa-dak
bilen başlaýan setirlere gabat gelýär, soň bolsaT
:# awk '/[Kk]T/{print}' /etc/hosts
Awk bilen nyşanlara düşüniň:
-
[0-9]
bir belgini aňladýar -
[a-z]
kiçi harp bilen gabat gelmegi aňladýar -
[A-Z]
bir baş harp bilen gabat gelmegi aňladýar -
[a-zA-Z]
bir harp bilen gabat gelmegi aňladýar -
[a-zA-Z 0-9]
bir harp ýa-da belgä gabat gelmegi aňladýar
Aşakdaky bir meselä seredeliň:
# awk '/[0-9]/{print}' /etc/hosts
Faýl/etc/host faýlyndaky ähli setirde ýokardaky mysalda azyndan ýekeje san
[0-9]
bar.Aşakdaky mysaldaky ýaly berlen nagyş bilen başlaýan ähli setirlere gabat gelýär:
# awk '/^fe/{print}' /etc/hosts # awk '/^ff/{print}' /etc/hosts
Berlen nagyş bilen gutarýan ähli setirlere gabat gelýär:
# awk '/ab$/{print}' /etc/hosts # awk '/ost$/{print}' /etc/hosts # awk '/rs$/{print}' /etc/hosts
Oňa eýerýän gahrymany göçme manyda kabul etmäge mümkinçilik berýär, ýagny edil edil şonuň ýaly hasaplaň.
Aşakdaky mysalda, birinji buýruk faýldaky ähli setirleri çap edýär, ikinji buýruk hiç zat çap etmeýär, sebäbi 25.00 dollarlyk setire gabat gelmek isleýärin, ýöne gaçmak nyşany ulanylmaýar.
Üçünji buýruk dogry, sebäbi gaçmak nyşany $bolşy ýaly $okamak üçin ulanylýar.
# awk '//{print}' deals.txt # awk '/$25.00/{print}' deals.txt # awk '/\$25.00/{print}' deals.txt
Gysgaça mazmun
Bularyň hemmesi awk buýruk setiriniň süzgüç guraly bilen däl, awk-iň esasy amallaryndan ýokardaky mysallar. Indiki bölümlerde awkyň çylşyrymly aýratynlyklaryny nädip ulanmalydygyny öňe süreris. Okanyňyz we goşmaçalar ýa-da düşündirişler üçin sag boluň, teswirler bölüminde teswir ýazyň.
-