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:

  1. Kosmos, aşaky çyzyk (_), A-Z, a-z, 0-9 ýaly adaty nyşanlar.
  2. Adaty nyşanlara giňeldilen meta nyşanlary, aşakdakylary öz içine alýar:
    1. (.) täze setirden başga islendik nyşanlara gabat gelýär.
    2. (*) ondan öňki nyşanlaryň nol ýa-da has köp barlygyna gabat gelýär.
    3. [a-f] , [1-5] we ş.m. ýaly nyşanlaryň
    4. ^ faýldaky setiriň başyna gabat gelýär.
    5. $ faýlyň setiriniň soňuna gabat gelýär.
    6. \ 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 we t bilen gutarýan yzygiderli setirleri aňladýan t * 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 awk a ýa-da l ýa-da 1 nyşanlary bolan ähli setirlere gabat geler./etc/hostlar faýlynda bir setirde.

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

    Indiki mysal K ýa-da k bilen başlaýan setirlere gabat gelýär, soň bolsa T :

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

    Awk bilen nyşanlara düşüniň:

    1. [0-9] bir belgini aňladýar
    2. [a-z] kiçi harp bilen gabat gelmegi aňladýar
    3. [A-Z] bir baş harp bilen gabat gelmegi aňladýar
    4. [a-zA-Z] bir harp bilen gabat gelmegi aňladýar
    5. [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ň.