Kaip naudoti Awk ir reguliariąsias išraiškas, norint filtruoti tekstą ar eilutę failuose


Kai vykdome tam tikras komandas Unix/Linux, norėdami skaityti arba redaguoti tekstą iš eilutės ar failo, dažniausiai bandome filtruoti išvestį į tam tikrą dominančią sekciją. Čia pravartu naudoti reguliariąsias išraiškas.

Taip pat skaitykite: 10 naudingų Linux grandinės operatorių su praktiniais pavyzdžiais

Kas yra reguliariosios išraiškos?

Reguliarioji išraiška gali būti apibrėžta kaip eilutė, kuri reiškia keletą simbolių sekų. Vienas iš svarbiausių dalykų, susijusių su reguliariosiomis išraiškomis, yra tai, kad jie leidžia filtruoti komandos ar failo išvestį, redaguoti teksto ar konfigūracijos failo skyrių ir pan.

Reguliariosios išraiškos ypatybės

Įprastos išraiškos sudaromos iš:

  1. Įprasti simboliai, pvz., tarpas, apatinis brūkšnys (_), A–Z, a–z, 0–9.
  2. Meta simboliai, kurie išplėsti iki įprastų simbolių, apima:

    1. (.) atitinka bet kurį vieną simbolį, išskyrus naują eilutę.
    2. (*) atitinka nulį ar daugiau tiesioginio prieš jį esančio simbolio egzistavimo atvejų.
    3. [ simbolis (-iai) ] atitinka bet kurį iš simbolių, nurodytų simboliuose, taip pat galima naudoti brūkšnelį (-), reiškiantį simbolių diapazoną, pvz. kaip [a-f], [1-5] ir pan.
    4. ^ atitinka failo eilutės pradžią.
    5. $ atitinka failo eilutės pabaigą.
    6. \ tai pabėgimo simbolis.

Norint filtruoti tekstą, reikia naudoti teksto filtravimo įrankį, pvz., awk. Galite galvoti apie awk kaip atskirą programavimo kalbą. Tačiau šio vadovo, kaip naudoti awk, apimtį aptarsime kaip paprastą komandų eilutės filtravimo įrankį.

Bendra awk sintaksė yra tokia:

awk 'script' filename

Kur 'script' yra komandų, kurias supranta awk ir kurios vykdomos faile, rinkinys.

Jis veikia nuskaitydamas nurodytą failo eilutę, padaro eilutės kopiją ir tada vykdo scenarijų eilutėje. Tai kartojama visose failo eilutėse.

'scenarijus' yra formos '/pattern/ action', kur pattern yra reguliarioji išraiška, o veiksmas > yra tai, ką awk padarys, kai eilutėje suras nurodytą šabloną.

Kaip naudoti „Awk“ filtravimo įrankį „Linux“.

Tolesniuose pavyzdžiuose mes sutelksime dėmesį į meta simbolius, kuriuos aptarėme aukščiau, naudodami awk ypatybes.

Paprastas awk naudojimo pavyzdys:

Toliau pateiktame pavyzdyje spausdinamos visos failo /etc/hosts eilutės, nes nepateiktas joks šablonas.

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

Naudokite „Awk“ su raštu:

Toliau pateiktame pavyzdyje pateiktas šablonas localhost, todėl awk atitiks eilutę su localhost faile /etc/hosts.

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

Awk naudojimas su (.) pakaitos simboliu šablone

Toliau pateiktame pavyzdyje (.) atitiks eilutes, kuriose yra loc, localhost, localnet.

Tai reiškia, kad * l some_single_character c *.

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

Awk naudojimas su (*) simboliu šablone

Jis atitiks eilutes, kuriose yra localhost, localnet, lines, capable, kaip parodyta toliau pateiktame pavyzdyje:

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

Taip pat suprasite, kad (*) bando jums surasti ilgiausią įmanomą atitiktį, kurią gali aptikti.

Pažvelkime į atvejį, kuris tai demonstruoja, paimkime reguliariąją išraišką t*t, kuri reiškia atitikties eilutes, kurios prasideda raide t ir baigiasi t žemiau esančioje eilutėje:

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

Naudodami šabloną /t*t/ gausite šias galimybes:

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

Ir (*), esantis /t*t/ pakaitos raidės simbolyje, leidžia awk pasirinkti paskutinę parinktį:

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

„Awk“ naudojimas su rinkiniu [ simbolis (-iai) ]

Pavyzdžiui, rinkinys [al1], čia awk atitiks visas eilutes, kuriose yra simbolis a arba l arba 1 failo eilutėje /etc/hosts.

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

Kitas pavyzdys atitinka eilutes, prasidedančias K arba k, po kurios eina T:

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

Diapazono simbolių nustatymas

Supraskite simbolius su awk:

  1. [0-9] reiškia vieną skaičių
  2. [a-z] reiškia, kad atitinka vieną mažąją raidę
  3. [A-Z] reiškia, kad atitinka vieną didžiąją raidę
  4. [a-zA-Z] reiškia, kad atitinka vieną raidę
  5. [a-zA-Z 0-9] reiškia, kad atitinka vieną raidę arba skaičių

Pažvelkime į pavyzdį žemiau:

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

Visoje failo /etc/hosts eilutėje yra bent vienas skaičius [0-9] aukščiau pateiktame pavyzdyje.

Naudokite Awk su (^) meta simboliu

Jis atitinka visas eilutes, kurios prasideda šablonu, pateiktu toliau pateiktame pavyzdyje:

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

Naudokite Awk su ($) meta simboliu

Jis atitinka visas eilutes, kurios baigiasi pateiktu modeliu:

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

Naudokite Awk su (\) pabėgimo simboliu

Tai leidžia jums sekantį veikėją suvokti kaip pažodinį, ty laikyti jį tokį, koks jis yra.

Toliau pateiktame pavyzdyje pirmoji komanda išspausdina visą failo eilutę, antroji komanda nespausdina nieko, nes noriu suderinti eilutę, kurioje yra 25,00 USD, bet nenaudojamas joks pabėgimo simbolis.

Trečioji komanda yra teisinga, nes pabėgimo simbolis buvo naudojamas nuskaityti $ tokį, koks jis yra.

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

Santrauka

Tai dar ne viskas naudojant awk komandų eilutės filtravimo įrankį, aukščiau pateiktus pavyzdžius, pagrindines awk operacijas. Kitose dalyse kalbėsime apie tai, kaip naudoti sudėtingas awk funkcijas. Dėkojame, kad perskaitėte ir už bet kokius papildymus ar paaiškinimus, paskelbkite komentarą komentarų skiltyje.