egrep: voorbeelde van die opdrag in GNU / Linux

egrep

grep dit is een van die mees gebruikte instrumente op die GNU / Linux-opdraglyn. Alhoewel dit 'n baie eenvoudige hulpmiddel is, kan u 'n groot aantal bewerkings uitvoer. Dit word veral saam met pype gebruik om spesifieke punte in die uitvoer van 'n vorige opdrag te kan opspoor, ens. Maar daar is ook 'n instrument bekend as egrep wat gelykstaande is aan die werking van grep met die -E-opsie.

Die e is afkomstig van "Uitgebreide regex", wat die opsie -E aktiveer en wat u standaard in egrep het sonder om die opsie te gebruik. Dit wil sê, u kan die uitgebreide gereelde uitdrukkings. In hierdie tutoriaal sal ek nie meer verduidelik wat gewone uitdrukkings is, hoe dit gebruik kan word en watter tipes in * nix is ​​nie. Ek wys net praktiese voorbeelde van 'n paar nuttige dinge wat u met egrep kan doen ...

grep, egrep en fgrep is soortgelyk. In werklikheid is egrep gelyk aan grep -E en fgrep is gelyk aan grep -F. Dit wil sê, in die geval wat ons betref, sal dit ook die patrone interpreteer as gereelde uitdrukkings.

Jy soek 'n reël of woord in een of meer lêers, soos ook die geval is met grep. Stel jou voor dat jy na die woord ubuntu wil soek in 'n lêer met die naam snap.txt en ook in al die .txt-lêers in die huidige gids:

egrep ubuntu snap.txt

egrep ubuntu *.txt

Soek kan ook wees rekursief Om die volledige inhoud van die huidige gids te deursoek:

egrep -r "hola mundo" *

Tot dusver is presiese woorde of snare deursoek, dit wil sê met inagneming van hoofletters en kleinletters (hooflettergevoelig), maar as u dit in 'n hooflettergevoelige modus wil doen, maak nie saak of dit hoofletters of kleinletters is nie, kan u die volgende gebruik (as u w byvoeg, vind dit slegs volledige wedstryde):

egrep -i "ejemplo" documento.txt

egrep -iw "ejemplo" documento.txt

Wys, nie die toevallighede nie, maar die lêername waar die ooreenstemmings gevind is:

egrep -l hola *.txt

Toon slegs die patroon of woord binne 'n dokument gesoek:

egrep -o printf hola.c

Onthou dat u al die moontlikhede kan benut wat u kan dink. U kan verskeie van die opsies wat u voorheen gesien het, kombineer, of u kan dit aanvul met ander opsies soos -A n en -B n, waar n die aantal lyne wat u voor (Voor) en daarna (Na) wil wys van die wedstryd of albei gelyktydig (C), sodat u kan sien wat die wedstryd omring:

egrep -A 2 "printf" hola.c

egrep -B 2 "printf" hola.c

egrep -C 2 printf hola.c

Onderdruk die lyne wat 'n vuurhoutjie bevat en wys slegs die lyne wat nie ooreenstem nie:

egrep -v "dos" números.doc

Of as u verkies, kan u dit gebruik meerdere woorde of ooreenstemmings met -e. Byvoorbeeld:

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

As jy dit gebruik -c kan net die aantal wedstryde tel, of keer dit om met -v om die aantal lyne wat nie ooreenstem nie, aan te dui. Byvoorbeeld:

egrep -c "include" main.c

egrep -v -c "include" main.c

En selfs wys reëlnommer waar die wedstryd plaasgevind het, en ook die posisie wat dit onderskeidelik beklee:

egrep -n "void" hola.c

egrep -o -b "printf" hola.c

En saam met die gereelde uitdrukkings die vermoëns daarvan kan uitgebrei word. Soek byvoorbeeld 'n reël wat begin met Hello en eindig met bye, of wat begin met Hello gevolg deur wat dan ook, en dan verskyn die wedstrydby onderskeidelik:

* Regstelling van die volgende opdrag: danksy die leser se opmerking Manuel Alcocer kon ek die volgende opdrag verander, omdat daar 'n fout was.

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

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

Maar as u wonder oor die verskil met grep, is hier 'n voorbeeld wat u duidelik sal maak ... In die geval van grep gebruik sonder -E, moet u die ontsnapreekse sodat dit die spesiale karakters as sodanig interpreteer, anders sou dit die patroon so interpreteer sonder om dit in ag te neem. Aan die ander kant, met egrep of grep -E sal dit hulle in ag neem. Byvoorbeeld:
grep '^no\(fork\|group\)' /etc/group

Dit is gelykstaande aan:

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

Dit wil sê, dit sal soek na die ooreenstemmende lyne wat met nofork of noggroup begin. Maar as u grep se eerste uitdrukking sonder die ontsnappingsreekse gebruik het, sou dit soek die konkrete patroon nee (vurk | groep):

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

U kan ook soek alfanumeriese reekse, of spesifieke waardes, soos om sekere IP's op te spoor:
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

As u verkies, kan u ander gewone uitdrukkings gebruik om meer spesifieke soektogte te doen. Byvoorbeeld | om een ​​te vind toeval of die ander:

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

U kan selfs opspoor hoofletters, kleinletters, slegs alfabetiese karakters, of alfanumeries, ens., met behulp van ander uitdrukkings soos: [: alnum:], [: alpha:], [: syfer:], [: onderste:], [: druk:], [: punt:], [: spasie:], [: boonste:], ens. Om byvoorbeeld na hoofletters te soek:
egrep [[:upper:]] diccioario

Ek hoop dit help u ... Ek sal binnekort gereelde uitdrukkings in 'n artikel wat spesifiek daaraan toegewy is, verduidelik ...


Die inhoud van die artikel voldoen aan ons beginsels van redaksionele etiek. Klik op om 'n fout te rapporteer hier.

5 kommentaar, los joune

Laat u kommentaar

Jou e-posadres sal nie gepubliseer word nie. Verpligte velde gemerk met *

*

*

  1. Verantwoordelik vir die data: Miguel Ángel Gatón
  2. Doel van die data: Beheer SPAM, bestuur van kommentaar.
  3. Wettiging: U toestemming
  4. Kommunikasie van die data: Die data sal nie aan derde partye oorgedra word nie, behalwe deur wettige verpligtinge.
  5. Datastoor: databasis aangebied deur Occentus Networks (EU)
  6. Regte: U kan u inligting te alle tye beperk, herstel en verwyder.

  1.   Plaaslike beeld van Manuel Alcocer dijo

    Goeie middag.

    'N Paar opmerkings ...

    U verduidelik die 'egrep'-opdrag, maar plaas nie die verskil tussen' egrep 'en' grep ', wat hier moet wees nie.

    Byvoorbeeld:
    Met grep: ip -4 a | grep '[0-9] \ +'
    Met egrep: ip -4 a | egrep '[0-9] +'

    Ahh, en dit is verkeerd, 'egrep "Hallo. * Bye" voorbeeld.txt'; die sukses hier vind plaas as daar 'n reël in die lêer is wat die string 'Hello' bevat gevolg deur wat ook al en gevolg deur 'totsiens', die reël kan regtig begin en eindig met wat ook al.

    Dit is wat die artikel sê:
    egrep '^ Hallo. * bye $' voorbeeld.txt

    En al die opsies, of byna almal (ek hou nie daarvan om dit na te gaan nie), is opsies van 'grep' en nie van 'egrep' nie.

    Beste groete.

    1.    Isak dijo

      Dankie dat u die fout aangemeld het. Wat u kommentaar lewer op die gewone uitdrukkings, het ek dit reeds in die tweede paragraaf gestel. Ek sal 'n spesifieke artikel aan hulle wy, want daar is baie en hierdie artikel sal te lank duur. N groet!

      1.    Plaaslike beeld van Manuel Alcocer dijo

        Hallo weer, Isak.

        In die tweede paragraaf sê of moes u basies sê dat 'egrep' 'n alias van 'grep -E' is, maar u gee geen voorbeeld van die gebruik van 'egrep' met 'n reëlmatige uitdrukking wat anders geskryf word as wanneer dit deur ' grep '.

        Die toewyding van 'n artikel om uitgebreide gereelde uitdrukkings te verduidelik, lyk vir my astrant, onder meer omdat daar sulke webwerwe is wat nie adverteer nie en baie belangrike inligtingswerk vir die GNU-gemeenskap doen: https://www.rexegg.com/

        Ek skryf nie hier vir trolling nie, my bedoeling met dit alles is dat as iemand hierdie inskrywing lees om te sien wat 'egrep' of 'grep' doen, kyk na ander bronne, hierdie inskrywing kan na niks verwys nie, dit verklaar min, sleg , bied oorbodige inligting en kan verwarrend wees, veral vir diegene wat geen kennis dra van GNU en die kragtige instrumente wat dit bied nie.

        Uiteindelik het u die fout wat ek na my eerste opmerking (^ $) aangedui het, bygevoeg en reggestel. Soos op ander webwerwe, moes u die persoon wat die regstelling aangebring het, aanhaal of ten minste sê dat dit 'n regstelling is wat deel uitmaak van die GNU-basis, dieselfde basis waarmee hierdie blog begin is en wat verlore.

        'N groet.

        1.    Isak dijo

          Dankie vir u standpunt.

  2.   fsafs dijo

    ffff