egrep: primjeri naredbi u GNU / Linuxu

egrep

grep to je jedan od najčešće korištenih alata na GNU / Linux naredbenom retku. Iako je vrlo jednostavan alat, omogućava 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 po defaultu bez upotrebe te opcije. Odnosno, možete koristiti prošireni regularni izrazi. U ovom vodiču neću ulaziti u objašnjavanje što su regularni izrazi, kako se mogu koristiti i koji su tipovi u * nixu. Pokazat ću vam 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.

Možete potražite liniju ili riječ u jednoj ili više datoteka, kao što je slučaj i sa 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đe može biti rekurzivno Da biste pretražili čitav sadržaj trenutnog direktorija:

egrep -r "hola mundo" *

Do sada su se pretraživale tač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žite samo obrazac ili riječ pretraženo u dokumentu:

egrep -o printf hola.c

Zapamtite 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 kao što su -A n i -B n, gdje n broj linija koje želite prikazati prije (prije) i nakon (poslije) 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

Potisnite redove koji sadrže podudaranje i prikazuju samo one koji se ne podudaraju:

egrep -v "dos" números.doc

Ili ako želite, možete koristiti više riječi ili podudaranja 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 sa -v da biste prikazali broj neusklađenih linija. Na primjer:

egrep -c "include" main.c

egrep -v -c "include" main.c

I čak prikaži broj linije gdje se utakmica dogodila, kao i pozicija koju zauzima:

egrep -n "void" hola.c

egrep -o -b "printf" hola.c

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

* Ispravka 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 tumači 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 obrazac ne (vilica | grupa):

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

Takođe možete pretraživati alfanumerički rasponi, ili određene vrijednosti, poput lociranja određenih IP adresa:
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 | da ga nađem 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:], [: cifra:], [: niža:], [: ispis:], [: punkt:], [: 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 tome ...


Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  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 obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   Manuel Alcocer slika rezerviranog mjesta rekao je

    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:
    Sa grep: ip -4 a | grep '[0-9] \ +'
    Sa egrepom: ip -4 a | egrep '[0-9] +'

    Ahh, i ovo je pogrešno, 'egrep "Zdravo. * Ćao" 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', red 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 rekao je

      Hvala što ste prijavili tu grešku. Ono što komentarišete regularne izraze, već sam stavio u drugi pasus. Posvetit ću im određeni članak, jer ih ima mnogo, a ovaj bi članak predugo trajao. Pozdrav!

      1.    Manuel Alcocer slika rezerviranog mjesta rekao je

        Pozdrav ponovo, Isaac.

        U drugom paragrafu 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 sa svime ovim da ako netko pročita ovaj unos da vidi š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 znanje 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 lokacijama, trebali ste citirati osobu koja je izvršila korekciju, ili barem reći da je to korekcija, koja je dio GNU baze, iste baze s kojom je ovaj blog pokrenut i izgubljen.

        A pozdrav.

        1.    Isaac rekao je

          Hvala vam na vašem gledištu.

  2.   fsafs rekao je

    ffff