Giunsa Paggamit ang Awk ug Regular nga Ekspresyon sa Pagsala sa Teksto o String sa mga File


Sa diha nga kita modagan sa pipila ka mga sugo sa Unix/Linux sa pagbasa o pag-edit sa teksto gikan sa usa ka string o file, kita sa kasagaran mosulay sa pagsala sa output ngadto sa usa ka gihatag nga seksyon sa interes. Dinhi magamit ang paggamit sa regular nga mga ekspresyon.

Ang usa ka regular nga ekspresyon mahimong ipasabut ingon usa ka kuldas nga nagrepresentar sa daghang pagkasunod-sunod sa mga karakter. Usa sa labing importante nga mga butang mahitungod sa regular nga mga ekspresyon mao nga kini nagtugot kanimo sa pagsala sa output sa usa ka sugo o file, pag-edit sa usa ka seksyon sa usa ka teksto o configuration file ug uban pa.

Ang mga regular nga ekspresyon gihimo sa:

  1. Ordinaryo nga mga karakter sama sa espasyo, underscore(_), A-Z, a-z, 0-9.
  2. Meta nga mga karakter nga gipalapdan ngadto sa ordinaryo nga mga karakter, sila naglakip sa:
    1. (.) motakdo kini sa bisan unsang karakter gawas sa bag-ong linya.
    2. (*) motakdo kini sa zero o labaw pa nga paglungtad sa diha-diha nga karakter nga nag-una niini.
    3. [ (mga) karakter ] kini motakdo sa bisan unsa nga karakter nga gipiho sa (mga) karakter, ang usa mahimo usab nga mogamit ug hyphen (-) aron magpasabot ug range sa mga karakter sama sa [a-f], [1-5], ug uban pa.
    4. ^ motakdo kini sa sinugdanan sa linya sa file.
    5. $ motakdo sa kataposan sa linya sa usa ka payl.
    6. \ kini usa ka karakter sa pag-ikyas.

    Aron ma-filter ang teksto, kinahanglan nga mogamit usa ka himan sa pagsala sa teksto sama sa awk. Mahimo nimong hunahunaon ang awk isip usa ka programming language sa iyang kaugalingon. Apan alang sa kasangkaran niini nga giya sa paggamit sa awk, atong tabonan kini isip usa ka yano nga command line filtering tool.

    Ang kinatibuk-ang syntax sa awk mao ang:

    # awk 'script' filename
    

    Diin ang script usa ka hugpong sa mga sugo nga masabtan sa awk ug gipatuman sa file, filename.

    Naglihok kini pinaagi sa pagbasa sa gihatag nga linya sa file, naghimo usa ka kopya sa linya ug dayon gipatuman ang script sa linya. Kini gisubli sa tanang linya sa file.

    Ang script anaa sa porma /pattern/ action diin ang pattern kay regular nga ekspresyon ug ang aksyon mao ang buhaton sa awk kung makit-an ang gihatag nga pattern sa linya.

    Giunsa Paggamit ang Awk Filtering Tool sa Linux

    Sa mosunod nga mga pananglitan, atong ipunting ang meta nga mga karakter nga atong gihisgutan sa ibabaw ubos sa mga bahin sa awk.

    Ang pananglitan sa ubos nag-imprenta sa tanang linya sa file /etc/hosts kay walay pattern nga gihatag.

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

    Ako ang pananglitan sa ubos, usa ka pattern localhost ang gihatag, mao nga ang awk motakdo sa linya nga adunay localhost sa /etc/hosts file.

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

    Ang (.) motakdo sa mga string nga adunay loc, localhost, localnet sa pananglitan sa ubos.

    Sa ato pa * l some_single_character c *.

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

    Kini motakdo sa mga string nga adunay localhost, localnet, mga linya, nga makahimo, sama sa pananglitan sa ubos:

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

    Makaamgo ka usab nga ang (*) naningkamot nga makuha nimo ang pinakataas nga posporo nga posible nga mamatikdan niini.

    Tan-awa ang usa ka kaso nga nagpakita niini, gamita ang regular nga ekspresyon t*t nga nagpasabot sa mga kuwerdas sa pagpares nga nagsugod sa letra t ug natapos sa t sa linya sa ubos:

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

    Makuha nimo ang mosunod nga mga posibilidad kung imong gamiton ang pattern /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
    

    Ug ang (*) sa /t*t/ wild card nga karakter nagtugot sa awk sa pagpili sa kataposang opsyon:

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

    Pananglitan ang set [al1], dinhi ang awk motakdo sa tanang mga kuwerdas nga adunay karakter a o l o 1 sa usa ka linya sa file /etc/hosts.

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

    Ang sunod nga pananglitan motakdo sa mga string nga nagsugod sa K o k nga gisundan sa T:

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

    Sabta ang mga karakter nga adunay awk:

    1. [0-9] nagpasabot sa usa ka numero
    2. Ang
    3. [a-z] nagpasabot sa pagpares sa usa ka gamay nga letra nga letra
    4. Ang
    5. [A-Z] nagpasabot sa pagpares sa usa ka upper case letter
    6. Ang
    7. [a-zA-Z] nagpasabot sa pagpares sa usa ka letra
    8. [a-zA-Z 0-9] nagpasabot nga pagpares sa usa ka letra o numero

    Atong tan-awon ang usa ka pananglitan sa ubos:

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

    Ang tanan nga linya gikan sa file /etc/hosts adunay labing menos usa ka numero [0-9] sa pananglitan sa ibabaw.

    Nahiangay kini sa tanan nga mga linya nga nagsugod sa sumbanan nga gihatag sama sa panig-ingnan sa ubos:

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

    Nahiangay kini sa tanan nga mga linya nga natapos sa gihatag nga sumbanan:

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

    Gitugotan ka niini nga kuhaon ang karakter nga nagsunod niini ingon usa ka literal nga nagpasabut nga ikonsiderar kini kung unsa kini.

    Sa panig-ingnan sa ubos, ang una nga command nag-print sa tanan nga linya sa file, ang ikaduha nga command wala mag-imprinta tungod kay gusto nako nga ipares ang usa ka linya nga adunay $25.00, apan walay escape nga karakter ang gigamit.

    Ang ikatulo nga sugo husto tungod kay ang usa ka escape nga karakter gigamit sa pagbasa sa $kung unsa kini.

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

    Summary

    Dili kana ang tanan sa awk command line filtering tool, ang mga pananglitan sa ibabaw sa usa ka batakang operasyon sa awk. Sa sunod nga mga bahin kita mag-uswag kung giunsa paggamit ang komplikado nga mga bahin sa awk. Salamat sa pagbasa ug alang sa bisan unsang mga pagdugang o pagpatin-aw, pag-post usa ka komento sa seksyon sa mga komento.