egrep: komandų pavyzdžiai GNU / Linux

egrep

grep tai yra vienas iš dažniausiai naudojamų įrankių GNU / Linux komandinėje eilutėje. Nepaisant to, kad tai labai paprastas įrankis, jis leidžia jums atlikti daugybę operacijų. Jis ypač naudojamas kartu su vamzdžiais, kad būtų galima nustatyti konkrečius taškus ankstesnės komandos išvestyje ir kt. Tačiau yra ir įrankis, žinomas kaip egrep, kuris prilygsta grep paleidimui su -E parinktimi.

El gaunamas iš „Extended regex“, kuris suaktyvina -E parinktį ir tai, ką pagal nutylėjimą turite egrep, nenaudodami šios parinkties. Tai yra, jūs galite naudoti išplėstiniai reguliarūs posakiai. Šioje pamokoje nenagrinėsiu, kas yra reguliarūs posakiai, kaip juos galima naudoti ir kokie yra „nix“ tipai. Aš tiesiog parodysiu praktinių pavyzdžių, naudingų dalykų, kuriuos galite padaryti naudodami egrep ...

grep, egrep ir fgrep yra panašūs. Tiesą sakant, egrep yra lygiavertis grep -E, o fgrep - grep -F. Tai reiškia, kad mums rūpimu atveju ji taip pat interpretuos modelius kaip įprastus posakius.

Jums ieškoti eilutės ar žodžio viename ar keliuose failuose, kaip tai daroma ir grep. Pvz., Įsivaizduokite, kad norite ieškoti žodžio „ubuntu“ faile, pavadintame snap.txt, taip pat visuose dabartinio katalogo .txt failuose:

egrep ubuntu snap.txt

egrep ubuntu *.txt

Paieškos taip pat gali būti rekursinis Norėdami ieškoti visame dabartinio katalogo turinyje:

egrep -r "hola mundo" *

Iki šiol buvo ieškoma tikslių žodžių ar eilučių, ty atsižvelgiant į didžiąsias ir mažąsias raides (didžiosios ir mažosios raidės), bet jei norite tai padaryti mažųjų ir mažųjų raidžių režimu, nesvarbu, ar jos yra didžiosios, ar mažosios, galite naudoti šiuos veiksmus (jei pridėsite w, jis suras tik visas atitiktis):

egrep -i "ejemplo" documento.txt

egrep -iw "ejemplo" documento.txt

Laida, ne sutapimai, o failų pavadinimai, kuriuose buvo rasti tie atitikmenys:

egrep -l hola *.txt

Rodyti tik šabloną ar žodį ieškojo dokumente:

egrep -o printf hola.c

Atminkite, kad galite pasinaudoti visomis galimybėmis, kurias tik galite įsivaizduoti. Galite sujungti keletą anksčiau matytų parinkčių arba galite jas papildyti kitomis parinktimis, tokiomis kaip -A n ir -B n, kur n eilučių, kurias norite rodyti prieš (prieš) ir po (po), skaičius rungtynių arba abiejų vienu metu (C), kad galėtumėte pamatyti, kas supa mačą:

egrep -A 2 "printf" hola.c

egrep -B 2 "printf" hola.c

egrep -C 2 printf hola.c

Nutraukti eilutes, kuriose yra atitikmuo, ir rodyti tik tas, kurios neatitinka:

egrep -v "dos" números.doc

Arba, jei norite, galite naudoti kelis žodžius ar atitikmenis su -e. Por ejemplo:

egrep -v -e "uno" -e "dos" -e "tres" números.txt

Jei naudojate -c gali suskaičiuoti tik rungtynių skaičiųarba apverskite jį naudodami -v, kad parodytumėte neatitinkančių eilučių skaičių. Pavyzdžiui:

egrep -c "include" main.c

egrep -v -c "include" main.c

Ir netgi rodyti eilutės numerį ten, kur įvyko rungtynės, ir poziciją, kurią jie užima:

egrep -n "void" hola.c

egrep -o -b "printf" hola.c

Ir kartu su reguliarūs posakiai jos galimybes galima išplėsti. Pvz., Raskite eilutę, kuri prasideda Hello ir baigiasi bye, arba kuri prasideda Hello, po kurios seka bet kas, o tada pasirodys atitinkamas atsisveikinimas:

* Šios komandos taisymas: skaitytojo Manuelio Alcocerio komentaro dėka pavyko pakeisti šią komandą, nes įvyko klaida.

egrep '^Hola.*adiós$' ejemplo.txt

egrep "Hola.*adiós" ejemplo.txt

Bet jei jums įdomu, koks skirtumas su „grep“, pateikite pavyzdį, kuris tai aiškiai parodys ... Jei naudojate „grep“ be -E, turėtumėte naudoti pabėgimo sekos kad aiškintų specialiuosius simbolius kaip tokius, kitaip interpretuotų modelį kaip tokį, neatsižvelgdamas į juos. Kita vertus, naudodamas egrep arba grep -E, jis į juos atsižvelgs. Pavyzdžiui:
grep '^no\(fork\|group\)' /etc/group

Tai būtų tolygu:

grep -E '^no(fork|group)' /etc/group
egrep '^no(fork|group)' /etc/group

Tai yra, jis ieškotų atitinkančių eilučių, prasidedančių nofork arba nogroup. Bet jei jūs naudojote pirmąją „grep“ išraišką be pabėgimo sekų, tai būtų ieškojimas betono modelis ne (šakutė | grupė):

grep 'no(fork|group)' /etc/group

Taip pat galite ieškoti raidiniai ir skaitiniai diapazonai, arba konkrečias reikšmes, pvz., tam tikrų IP nustatymui
cat /etc/networks | egrep "192.168.1.[5-9]"
cat /etc/networks | egrep "192.168.[1-3].[5-9]"
cat /etc/networks | egrep "192.168.1.[0-3]|[5-9]"
egrep 192.168.4.[10,40] networks

Jei norite, galite naudoti kitus įprastus posakius, kad atliktumėte konkretesnes paieškas. Pavyzdžiui | kad surastum sutapimas ar kitas:

egrep -i '^(printf|scanf)' hola.c

Jūs netgi galite rasti didžiosios, mažosios, tik abėcėlės arba raidinės ir skaitmeninės raidės ir kt., naudojant kitas išraiškas, tokias kaip: [: alnum:], [: alfa:], [: digit:], [: lower:], [: print:], [: punct:], [: space:], [ : viršutinė:] ir kt. Pavyzdžiui, jei norite ieškoti didžiųjų raidžių:
egrep [[:upper:]] diccioario

Tikiuosi, kad tai jums padės ... Netrukus paaiškinsiu reguliarias išraiškas specialiai jai skirtame straipsnyje ...


Palikite komentarą

Jūsų elektroninio pašto adresas nebus skelbiamas. Privalomi laukai yra pažymėti *

*

*

  1. Atsakingas už duomenis: Miguel Ángel Gatón
  2. Duomenų paskirtis: kontroliuoti šlamštą, komentarų valdymą.
  3. Įteisinimas: jūsų sutikimas
  4. Duomenų perdavimas: Duomenys nebus perduoti trečiosioms šalims, išskyrus teisinius įsipareigojimus.
  5. Duomenų saugojimas: „Occentus Networks“ (ES) talpinama duomenų bazė
  6. Teisės: bet kuriuo metu galite apriboti, atkurti ir ištrinti savo informaciją.

  1.   Manuelis Alkoceris sakė

    Laba diena.

    Kelios pastabos ...

    Paaiškinate komandą „egrep“, bet nedėkite skirtumo tarp „egrep“ ir „grep“, kurie čia turėtų būti.

    Pavyzdžiui:
    Su grep: ip -4 a | grep '[0-9] \ +'
    Su egrep: ip -4 a | egrep '[0-9] +'

    Ahh, ir tai neteisinga, 'egrep „Sveiki. sėkmė čia įvyksta, kai faile yra eilutė, kurioje yra eilutė „Sveiki“, po kurios seka bet kas, o po to - „sudie“, eilutė tikrai gali prasidėti ir baigtis bet kuo.

    Tai būtų tai, ką sako straipsnis:
    egrep '^ Sveiki. * bye $' example.txt

    Visi variantai arba beveik visi (aš nenustoju to patikrinti) yra „grep“, o ne tik „egrep“ variantai.

    Su geriausiais linkėjimais.

    1.    Izaokas sakė

      Dėkojame, kad pranešėte apie klaidą. Tai, ką komentuojate reguliariais posakiais, aš jau dedu į antrą pastraipą. Skirsiu jiems konkretų straipsnį, nes jų yra daug ir šis straipsnis užtruktų per ilgai. Sveikinimas!

      1.    Manuelis Alkoceris sakė

        Sveikas dar kartą, Izaokai.

        Antroje pastraipoje jūs iš esmės sakote arba turėjote pasakyti, kad „egrep“ yra „grep -E“ pseudonimas, tačiau nepateikiate „egrep“ naudojimo su tam tikra taisyklinga išraiška, kuri parašyta kitaip nei naudojamas „grep“.

        Skirti straipsnį paaiškinti išplėstines reguliariąsias išraiškas man atrodo drąsu, be kita ko, nes yra tokių svetainių, kurios nereklamuoja ir atlieka labai svarbų GNU bendruomenės informacinį darbą: https://www.rexegg.com/

        Aš nerašau čia dėl trolinimo, mano ketinimas yra tai, kad jei kas nors perskaitys šį įrašą, norėdamas pamatyti, ką daro „egrep“ ar „grep“, prašau pažvelgti į kitus šaltinius, šis įrašas negali būti nuoroda į nieką, jis mažai ką paaiškina , blogai, siūlo nereikalingą informaciją ir gali būti painu, ypač tiems, kurie neturi žinių apie GNU ir galingus jo siūlomus įrankius.

        Galiausiai pridėjote ir ištaisėte klaidą, kurią nurodžiau po pirmojo komentaro (^ $). Kaip ir kitose svetainėse, turėtumėte nurodyti asmenį, kuris padarė pataisą, arba bent jau pasakyti, kad tai yra pataisymas, kuris yra GNU bazės dalis, ta pati bazė, su kuria buvo sukurtas ir pamestas šis tinklaraštis.

        Pasisveikinimas.

        1.    Izaokas sakė

          Dėkoju už jūsų požiūrį.

  2.   fsafs sakė

    ffff