egrep: primeri ukazov v GNU / Linux

egrep

grep je eno najpogosteje uporabljenih orodij v ukazni vrstici GNU / Linux. Kljub temu, da je zelo preprosto orodje, omogoča izvajanje velikega števila operacij. Uporablja se zlasti skupaj s cevmi, da lahko poišče določene točke v izhodu prejšnjega ukaza itd. Obstaja pa tudi orodje, znano kot egrep, ki je enakovredno zagonu grepa z možnostjo -E.

E prihaja iz "Razširjeni regularni izraz", ki aktivira možnost -E in tisto, kar imate privzeto v egrepu, ne da bi uporabljali to možnost. To pomeni, da lahko uporabite razširjeni regularni izrazi. V tej vadnici ne bom razlagal, kaj so regularni izrazi, kako jih je mogoče uporabiti in katere vrste so v * nixu. Pokazal bom samo praktične primere nekaterih koristnih stvari, ki jih lahko naredite z egrepom ...

grep, egrep in fgrep so podobni. Dejansko je egrep enakovreden grep -E, fgrep pa grep -F. To pomeni, da bo v primeru, ki nas zadeva, vzorce razlagal tudi kot regularne izraze.

Ti poiščite vrstico ali besedo v eni ali več datotekah, kot je tudi pri grep. Recimo, da želite besedo ubuntu poiskati v datoteki z imenom snap.txt in tudi v vseh datotekah .txt v trenutnem imeniku:

egrep ubuntu snap.txt

egrep ubuntu *.txt

Iskanje je lahko tudi rekurzivno Če želite iskati po celotni vsebini trenutnega imenika:

egrep -r "hola mundo" *

Doslej so iskali natančne besede ali nize, torej ob upoštevanju velikih in malih črk (občutljivo na velike in male črke), če pa želite to storiti v načinu, ki ne razlikuje med velikimi in malimi črkami, ne glede na to, ali so velike ali male, lahko uporabite naslednje (če dodate w najde le popolna ujemanja):

egrep -i "ejemplo" documento.txt

egrep -iw "ejemplo" documento.txt

Pokažite, ne naključja, ampak imena datotek, v katerih so bila najdena ta ujemanja:

egrep -l hola *.txt

Pokaži samo vzorec ali besedo iskali v dokumentu:

egrep -o printf hola.c

Ne pozabite, da lahko uporabite vse možnosti, ki si jih predstavljate. Kombinirate lahko več prej videnih možnosti ali pa jih dopolnite z drugimi možnostmi, kot sta -A n in -B n, kjer n število vrstic, ki jih želite prikazati pred (Pred) in za (Po) tekme ali oboje hkrati (C), tako da lahko vidite, kaj obdaja tekmo:

egrep -A 2 "printf" hola.c

egrep -B 2 "printf" hola.c

egrep -C 2 printf hola.c

Potisni vrstice, ki vsebujejo ujemanje, in prikaži samo tiste, ki se ne ujemajo:

egrep -v "dos" números.doc

Ali če želite, lahko uporabite več besed ali ujemanja z -e. Na primer:

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

Če uporabljate -c lahko šteje samo število tekem, ali ga obrnite z -v, da prikažete število neusklajenih vrstic. Na primer:

egrep -c "include" main.c

egrep -v -c "include" main.c

In celo pokaži številko vrstice kje se je zgodila tekma in tudi položaj, ki ga zaseda:

egrep -n "void" hola.c

egrep -o -b "printf" hola.c

In skupaj z regularni izrazi njegove zmogljivosti je mogoče razširiti. Na primer, poiščite vrstico, ki se začne s Hello in konča s bye, ali pa se začne s Hello, čemur sledi karkoli in nato se pojavi match bye:

* Popravek naslednjega ukaza: zahvaljujoč komentarju bralca Manuela Alcocerja sem lahko spremenil naslednji ukaz, ker je prišlo do napake.

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

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

Če pa se sprašujete o razliki z grepom, je tukaj primer, ki vam bo jasno povedal ... V primeru uporabe grepa brez -E uporabite zaporedja pobega tako da razlaga posebne znake kot take, sicer bi vzorec kot tak razlagal, ne da bi jih upošteval. Po drugi strani pa jih bo upošteval pri egrep ali grep -E. Na primer:
grep '^no\(fork\|group\)' /etc/group

To bi bilo enakovredno:

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

To pomeni, da bi iskal ujemajoče se vrstice, ki se začnejo z nofork ali nogroup. Če pa ste uporabili prvi izraz grepa brez ubežnih zaporedij, bi to poiskalo konkretni vzorec ne (vilice | skupina):

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

Lahko tudi iščete alfanumerični obsegiali posebne vrednosti, na primer za iskanje določenih IP-jev:
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

Če želite, lahko za natančnejša iskanja uporabite druge regularne izraze. Na primer | najti enega naključje ali drugo:

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

Lahko celo poiščete velike, male, samo abecedne ali alfanumerične itd., z uporabo drugih izrazov, kot so: [: alnum:], [: alfa:], [: številka:], [: spodnja:], [: tisk:], [: punct:], [: presledek], [ : zgornji:] itd. Če želite na primer iskati velike črke:
egrep [[:upper:]] diccioario

Upam, da vam pomaga ... Kmalu bom razložil regularne izraze v članku, ki je posebej posvečen temu ...


Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.

  1.   Manuel Alcocer nadomestna slika je dejal

    Dober dan.

    Nekaj ​​opomb ...

    Pojasnite ukaz 'egrep', vendar ne postavljajte razlike med 'egrep' in 'grep', kar bi moralo biti to, kar je tukaj.

    Na primer:
    Z grep: ip -4 a | grep '[0-9] \ +'
    Z egrepom: ip -4 a | egrep '[0-9] +'

    Ahh, in to je narobe, 'egrep "Pozdravljeni. * Adijo" example.txt'; uspeh tukaj nastopi, ko je v datoteki vrstica, ki vsebuje niz 'Pozdravljeni', čemur sledi karkoli in ki mu sledi 'zbogom', vrstica se lahko zares začne in konča s čimer koli.

    Tako bi pisalo v članku:
    egrep '^ Pozdravljeni. * adijo $' example.txt

    Vse možnosti ali skoraj vse (ne ustavim se, da bi to preveril) so možnosti izključno 'grep' in ne 'egrep'.

    Lep pozdrav.

    1.    Isaac je dejal

      Hvala, ker ste prijavili to napako. Kar komentirate regularne izraze, sem že navedel v drugem odstavku. Zanje bom posvetil določen članek, ker jih je veliko in bi ta članek trajal predolgo. Pozdrav!

      1.    Manuel Alcocer nadomestna slika je dejal

        Še enkrat živjo, Isaac.

        V drugem odstavku v bistvu pravite ali bi morali reči, da je 'egrep' vzdevek 'grep -E', vendar ne navedete nobenega primera uporabe 'egrep' z nekim regularnim izrazom, ki je napisan drugače kot takrat uporablja 'grep'.

        Posvetiti se članku za razlago razširjenih regularnih izrazov se mi zdi drzno, med drugim tudi zato, ker obstajajo takšna spletna mesta, ki ne oglašujejo in opravljajo zelo pomembno informativno delo za skupnost GNU: https://www.rexegg.com/

        Tu ne pišem za trolanje, moj namen pri vsem tem je, da če nekdo prebere ta vnos, da bi ugotovil, kaj počne 'egrep' ali 'grep', si oglejte druge vire, ta vnos ne more biti sklic na nič, malo pojasnjuje , slabo, ponuja odvečne informacije in je lahko zmedeno, zlasti za tiste, ki ne poznajo GNU in močnih orodij, ki jih ponuja.

        Nazadnje ste dodali in odpravili napako, ki sem jo navedel po prvem komentarju (^ $). Kot na drugih spletnih mestih bi tudi vi morali navesti osebo, ki je izvedla popravek, ali vsaj reči, da gre za popravek, ki je del osnove GNU, iste osnove, s katero se je začel ta blog in je bil izgubljen.

        Pozdrav.

        1.    Isaac je dejal

          Hvala za vaše stališče.

  2.   fsafs je dejal

    ffff