egrep: primjeri naredbe u GNU / Linuxu

egrep

grep jedan je od najčešće korištenih alata na naredbenom retku GNU / Linux. Iako je vrlo jednostavan alat, omogućuje vam izvođenje velikog broja operacija. Koristi se posebno zajedno s cijevima, kako bi mogao locirati određene točke u izlazu prethodne naredbe, itd. Ali postoji i alat poznat kao egrep koji je ekvivalentan pokretanju grepa s opcijom -E.

E dolazi iz "Proširenog regularnog izraza", što je ono što aktivira opciju -E i ono što imate u egrepu prema zadanim postavkama bez upotrebe te mogućnosti. Odnosno, možete koristiti prošireni regularni izrazi. U ovom uputstvu neću ulaziti u objašnjavanje što su regularni izrazi, kako se mogu koristiti i koje su vrste u * nixu. Pokazat ću samo praktične primjere nekih korisnih stvari koje možete učiniti s egrepom ...

grep, egrep i fgrep su slični. U stvari, egrep je ekvivalentan grep -E, a fgrep je ekvivalentan grep -F. Odnosno, u slučaju koji se tiče nas, također će interpretirati obrasce kao regularne izraze.

Vi potražite redak ili riječ u jednoj ili više datoteka, kao što je slučaj i s grep. Na primjer, pretpostavimo da želite tražiti riječ ubuntu u datoteci koja se naziva snap.txt, a također i u svim .txt datotekama u trenutnom direktoriju:

egrep ubuntu snap.txt

egrep ubuntu *.txt

Pretraživanje također može biti ponavljajući Da biste pretražili cjelokupni sadržaj trenutnog direktorija:

egrep -r "hola mundo" *

Do sada su se pretraživale točne riječi ili nizovi, tj. Uzimajući u obzir velika i mala slova (osjetljivo na velika i mala slova), ali ako to želite učiniti u načinu koji ne razlikuje velika i mala slova, bez obzira jesu li velika ili mala, možete koristiti sljedeće (ako dodate w pronalazi samo potpuna podudaranja):

egrep -i "ejemplo" documento.txt

egrep -iw "ejemplo" documento.txt

Pokažite, ne slučajnosti, ali imena datoteka u kojima su pronađena ta podudaranja:

egrep -l hola *.txt

Prikaži samo obrazac ili riječ pretraženo u dokumentu:

egrep -o printf hola.c

Ne zaboravite da možete iskoristiti sve mogućnosti koje možete zamisliti. Možete kombinirati nekoliko prethodno viđenih opcija ili ih možete nadopuniti drugim opcijama poput -A n i -B n, gdje n broj redaka koje želite prikazati prije (Prije) i nakon (Nakon) utakmice ili oboje istovremeno (C), tako da možete vidjeti što okružuje utakmicu:

egrep -A 2 "printf" hola.c

egrep -B 2 "printf" hola.c

egrep -C 2 printf hola.c

Suzbiti retke koji sadrže podudaranje i prikazivati ​​samo one koji se ne podudaraju:

egrep -v "dos" números.doc

Ili ako želite, možete koristiti više riječi ili se podudara s -e, Na primjer:

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

Ako koristite -c može računati samo broj podudaranja, ili ga obrnite s -v da biste prikazali broj neusklađenih linija. Na primjer:

egrep -c "include" main.c

egrep -v -c "include" main.c

Pa čak i pokazati redni broj gdje se odigrao meč, kao i položaj koji zauzima:

egrep -n "void" hola.c

egrep -o -b "printf" hola.c

I zajedno s regularni izrazi njegove se mogućnosti mogu proširiti. Na primjer, pronađite redak koji započinje s Hello i završava s bye, ili koji započinje sa Hello nakon čega slijedi bilo što, a zatim se pojavljuje match bye:

* Ispravak sljedeće naredbe: zahvaljujući komentaru čitatelja Manuela Alcocera uspio sam izmijeniti sljedeću naredbu jer je došlo do pogreške.

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

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

Ali ako se pitate o razlici s grepom, evo primjera koji će vam to jasno pokazati ... U slučaju korištenja grepa bez -E trebali biste koristiti sekvence bijega tako da interpretira posebne znakove kao takve, inače bi interpretirao obrazac kao takav ne uzimajući ih u obzir. S druge strane, s egrep ili grep -E će ih uzeti u obzir. Na primjer:
grep '^no\(fork\|group\)' /etc/group

To bi bilo ekvivalentno:

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

Odnosno, tražio bi odgovarajuće linije koje počinju s nofork ili nogroup. Ali ako ste koristili grepov prvi izraz bez escape sekvenci, ono što bi učinilo je pretraživanje konkretni uzorak ne (vilica | grupa):

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

Također možete pretraživati alfanumerički rasponi, ili određene vrijednosti, poput lociranja određenih IP-ova:
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

Ako želite, možete koristiti druge regularne izraze za preciznija pretraživanja. Na primjer | pronaći ga slučajnost ili drugo:

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

Možete čak i locirati veliko, malo, samo abecedni znakovi ili alfanumerički itd., koristeći druge izraze kao što su: [: alnum:], [: alfa:], [: znamenka:], [: niža:], [: ispis:], [: punct:], [: razmak:], [ : gornji:] itd. Na primjer, za pretraživanje velikih slova:
egrep [[:upper:]] diccioario

Nadam se da će vam pomoći ... Uskoro ću objasniti regularne izraze u članku posvećenom njemu ...


Sadržaj članka pridržava se naših načela urednička etika. Da biste prijavili pogrešku, kliknite ovdje.

5 komentara, ostavi svoj

Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   Slika rezerviranog mjesta Manuela Alcocera dijo

    Dobar dan.

    Nekoliko napomena ...

    Objasnili ste naredbu 'egrep', ali nemojte stavljati razliku između 'egrep' i 'grep', što bi ovdje trebalo biti ono što je.

    Na primjer:
    Uz grep: ip -4 a | grep '[0-9] \ +'
    S egrepom: ip -4 a | egrep '[0-9] +'

    Ahh, a ovo je pogrešno, 'egrep "Zdravo. * Doviđenja" example.txt'; ovdje se uspjeh događa kada u datoteci postoji redak koji sadrži niz 'Zdravo', iza čega slijedi i nakon čega slijedi 'zbogom', redak zaista može započeti i završiti s čim god.

    Ovo bi bilo ono što članak kaže:
    egrep '^ Zdravo. * bye $' example.txt

    I sve opcije, ili gotovo sve (ne prestajem provjeravati), opcije su 'grep', a ne isključivo 'egrep'.

    Srdačan pozdrav.

    1.    Isaac dijo

      Hvala što ste prijavili tu pogrešku. Ono što komentirate s regularnim izrazima, to sam već stavio u drugi odlomak. Posvetit ću im određeni članak, jer ih je mnogo i ovaj bi članak predugo trajao. Pozdrav!

      1.    Slika rezerviranog mjesta Manuela Alcocera dijo

        Pozdrav opet, Isaac.

        U drugom odlomku u osnovi kažete, ili ste trebali reći, da je 'egrep' pseudonim 'grep -E', ali ne dajete nijedan primjer korištenja 'egrep' s nekim regularnim izrazom koji je napisan drugačije nego kada koristi 'grep'.

        Posvećivanje članka za objašnjavanje proširenih regularnih izraza čini mi se odvažnim, između ostalog i zato što postoje web stranice poput ove koje se ne oglašavaju i rade vrlo važan informativni posao za GNU zajednicu: https://www.rexegg.com/

        Ne pišem ovdje zbog trolanja, moja je namjera u svemu tome da ako netko pročita ovaj unos da bi vidio što čini 'egrep' ili 'grep', molim pogledajte druge izvore, ovaj unos ne može biti referenca na bilo što, objašnjava malo, loše, nudi suvišne informacije i može zbuniti, posebno za one koji nemaju znanja o GNU-u i moćnim alatima koje on nudi.

        Konačno, dodali ste i ispravili grešku koju sam naznačio nakon svog prvog komentara (^ $). Kao i na drugim web mjestima, i vi ste trebali navesti osobu koja je izvršila ispravak ili barem reći da je to ispravak, koji je dio GNU baze, iste baze s kojom je ovaj blog pokrenut i izgubljen.

        Pozdrav.

        1.    Isaac dijo

          Hvala vam na vašem gledištu.

  2.   fsafs dijo

    ffsaf