egrep: exemple de comandă în GNU / Linux

egrep

grep este unul dintre cele mai utilizate instrumente de pe linia de comandă GNU / Linux. În ciuda faptului că este un instrument foarte simplu, vă permite să efectuați un număr mare de operații. Se folosește mai ales împreună cu țevi, pentru a putea localiza puncte specifice în ieșirea unei comenzi anterioare etc. Dar există și un instrument cunoscut sub numele de egrep, care este echivalent cu rularea grep cu opțiunea -E.

E provine din „Extended regex”, care activează opțiunea -E și ceea ce aveți în egrep în mod implicit, fără a utiliza acea opțiune. Adică, puteți utiliza expresii regulate extinse. În acest tutorial nu voi intra în a explica ce sunt expresiile regulate, cum pot fi utilizate și ce tipuri sunt în * nix. Voi arăta doar exemple practice ale unor lucruri utile pe care le puteți face cu egrep ...

grep, egrep și fgrep sunt similare. De fapt, egrep este echivalent cu grep -E și fgrep este echivalent cu grep -F. Adică, în cazul care ne privește, va interpreta și modelele ca expresii regulate.

Tu căutați o linie sau un cuvânt într-unul sau mai multe fișiere, la fel ca și în cazul grep. De exemplu, să presupunem că doriți să căutați cuvântul ubuntu într-un fișier numit snap.txt și, de asemenea, în toate fișierele .txt din directorul curent:

egrep ubuntu snap.txt

egrep ubuntu *.txt

Căutarea poate fi, de asemenea recursiv Pentru a căuta întregul conținut al directorului curent:

egrep -r "hola mundo" *

Până în prezent, au fost căutate cuvinte sau șiruri exacte, adică ținând cont de majuscule și minuscule (minuscule), dar dacă doriți să faceți acest lucru în modul nesensibil, indiferent dacă sunt majuscule sau mici, puteți utiliza următoarele (dacă adăugați w găsește doar potriviri complete):

egrep -i "ejemplo" documento.txt

egrep -iw "ejemplo" documento.txt

Arată nu coincidențele, ci numele fișierelor unde au fost găsite aceste potriviri:

egrep -l hola *.txt

Afișați doar modelul sau cuvântul căutat într-un document:

egrep -o printf hola.c

Amintiți-vă că puteți folosi toate posibilitățile pe care vi le puteți imagina. Puteți combina mai multe dintre opțiunile văzute anterior sau le puteți completa cu alte opțiuni, cum ar fi -A n și -B n, unde n numărul de linii pe care doriți să le afișați înainte (Înainte) și după (După) din meci sau ambele în același timp (C), astfel încât să puteți vedea ce înconjoară meciul:

egrep -A 2 "printf" hola.c

egrep -B 2 "printf" hola.c

egrep -C 2 printf hola.c

Suprimă liniile care conțin o potrivire și arată numai cele care nu se potrivesc:

egrep -v "dos" números.doc

Sau, dacă preferați, puteți utiliza mai multe cuvinte sau potriviri cu -e. De exemplu:

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

Dacă folosești -c poate număra doar numărul de meciuri, sau inversați-l cu -v pentru a afișa numărul de linii nepotrivite. De exemplu:

egrep -c "include" main.c

egrep -v -c "include" main.c

Și chiar arată numărul liniei unde a avut loc meciul și, de asemenea, poziția pe care o ocupă:

egrep -n "void" hola.c

egrep -o -b "printf" hola.c

Și împreună cu expresii obisnuite capacitățile sale pot fi extinse. De exemplu, găsiți o linie care începe cu Hello și se termină cu bye, sau care începe cu Hello urmată de orice și apoi apare potrivirea bye:

* Corectarea următoarei comenzi: datorită comentariului cititorului Manuel Alcocer am putut modifica următoarea comandă, deoarece a existat o eroare.

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

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

Dar dacă vă întrebați despre diferența cu grep, iată un exemplu care vă va da clar ... În cazul utilizării grep fără -E ar trebui să utilizați secvențe de evadare astfel încât să interpreteze caracterele speciale ca atare, altfel ar interpreta tiparul ca atare fără a le lua în considerare. Pe de altă parte, cu egrep sau grep -E le va lua în considerare. De exemplu:
grep '^no\(fork\|group\)' /etc/group

Acest lucru ar fi echivalent cu:

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

Adică ar căuta liniile potrivite care încep cu nofork sau nogroup. Dar dacă ați folosi prima expresie grep fără secvențele de evadare, ceea ce ar face este să căutați tiparul concret nu (furculiță | grup):

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

De asemenea, puteți căuta intervale alfanumericesau valori specifice, cum ar fi localizarea anumitor adrese IP:
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

Dacă preferați, puteți utiliza alte expresii regulate pentru a face căutări mai specifice. De exemplu | pentru a găsi una coincidență sau cealaltă:

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

Puteți chiar localiza majuscule, minuscule, numai caractere alfabetice sau alfanumerice etc., folosind alte expresii precum: [: alnum:], [: alpha:], [: digit:], [: lower:], [: print:], [: punct:], [: space:], [: superior:], etc. De exemplu, pentru a căuta majuscule:
egrep [[:upper:]] diccioario

Sper că te va ajuta ... În curând voi explica expresiile regulate într-un articol dedicat special acestuia ...


Conținutul articolului respectă principiile noastre de etică editorială. Pentru a raporta o eroare, faceți clic pe aici.

5 comentarii, lasă-le pe ale tale

Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.

  1.   Imagine de substituent Manuel Alcocer el a spus

    Bună ziua.

    Câteva remarci ...

    Explicați comanda „egrep”, dar nu puneți diferența între „egrep” și „grep”, care ar trebui să fie ceea ce este aici.

    De exemplu:
    Cu grep: ip -4 a | grep '[0-9] \ +'
    Cu egrep: ip -4 a | egrep '[0-9] +'

    Ahh, iar acest lucru este greșit, 'egrep "Bună ziua. * Bye" example.txt'; succesul aici apare atunci când există o linie în fișier care conține șirul „Bună ziua” urmat de orice și urmat de „la revedere”, linia poate începe cu adevărat și se poate termina cu orice.

    Acest lucru ar fi ceea ce spune articolul:
    egrep '^ Hello. * bye $' example.txt

    Și toate opțiunile, sau aproape toate (nu mă opresc să o verific), sunt opțiuni de „grep” nu de „egrep” exclusiv.

    Cele mai bune urări.

    1.    Isaac el a spus

      Vă mulțumim că ați raportat această eroare. Ceea ce comentați asupra expresiilor regulate, l-am pus deja în al doilea paragraf. Le voi dedica un articol specific, pentru că sunt multe și acest articol ar dura prea mult. Un salut!

      1.    Imagine de substituent Manuel Alcocer el a spus

        Bună ziua, Isaac.

        În al doilea paragraf, practic spuneți sau ar fi trebuit să spuneți că „egrep” este un alias al „grep -E”, dar nu dați niciun exemplu de utilizare a „egrep” cu o expresie regulată care este scrisă diferit decât atunci când este utilizată de „ grep '.

        Dedicarea unui articol pentru a explica expresii regulate extinse mi se pare îndrăzneață, printre altele, deoarece există site-uri de genul acesta care nu fac publicitate și fac o muncă informativă foarte importantă pentru comunitatea GNU: https://www.rexegg.com/

        Nu scriu aici pentru trolling, intenția mea cu toate acestea este că dacă cineva citește această intrare pentru a vedea ce face „egrep” sau „grep”, te rog să te uiți la alte surse, această intrare nu se poate referi la nimic, explică puțin, rău , oferă informații de prisos și poate fi confuz, mai ales pentru cei care nu au cunoștințe despre GNU și instrumentele puternice pe care le oferă.

        În cele din urmă, ați adăugat și remediat eroarea pe care am indicat-o după primul meu comentariu (^ $). Ca și în alte site-uri, ar fi trebuit să citați persoana care a făcut corecția sau, cel puțin, să spuneți că este o corecție, care face parte din baza GNU, aceeași bază cu care a fost lansat și a fost acest blog pierdut.

        Un salut.

        1.    Isaac el a spus

          Vă mulțumim pentru punctul dvs. de vedere.

  2.   fsafs el a spus

    ffsaf