egrep: príklady príkazov v GNU / Linux

egrep

grep je to jeden z najpoužívanejších nástrojov príkazového riadku GNU / Linux. Napriek tomu, že je to veľmi jednoduchý nástroj, umožňuje vykonávať veľké množstvo operácií. Používa sa najmä spolu s rúrkami, aby bolo možné lokalizovať konkrétne body na výstupe z predchádzajúceho príkazu atď. Existuje ale aj nástroj známy ako egrep, ktorý je ekvivalentný spusteniu grepu s voľbou -E.

Písmeno e pochádza z „Extended regex“, čo je to, čo aktivuje voľbu -E a čo máte v egrep štandardne bez použitia tejto možnosti. To znamená, že môžete použiť rozšírené regulárne výrazy. V tomto tutoriále sa nebudem venovať vysvetleniu, čo sú regulárne výrazy, ako sa dajú použiť a aké typy sú v * nix. Iba vám ukážem praktické príklady niektorých užitočných vecí, ktoré môžete urobiť s egrep ...

grep, egrep a fgrep sú podobné. V skutočnosti je egrep ekvivalentom grep -E a fgrep je ekvivalentom grep -F. To znamená, že v prípade, že sa nás to týka, bude to tiež interpretovať vzory ako regulárne výrazy.

Vy vyhľadajte riadok alebo slovo v jednom alebo viacerých súboroch, ako je to aj v prípade grep. Napríklad si predstavte, že chcete hľadať slovo ubuntu v súbore s názvom snap.txt a tiež vo všetkých súboroch .txt v aktuálnom adresári:

egrep ubuntu snap.txt

egrep ubuntu *.txt

Vyhľadávanie môže byť tiež rekurzívny Ak chcete prehľadať celý obsah aktuálneho adresára:

egrep -r "hola mundo" *

Doteraz sa hľadali presné slová alebo reťazce, to znamená s prihliadnutím na veľké a malé písmená (rozlišujú sa veľké a malé písmená), ale ak to chcete urobiť v režime bez rozlíšenia malých a veľkých písmen, bez ohľadu na to, či sú malé alebo veľké, môžete použiť nasledujúce (ak pridáte w nájde iba úplné zhody):

egrep -i "ejemplo" documento.txt

egrep -iw "ejemplo" documento.txt

Ukážte, nie náhody, ale názvy súborov, kde sa tieto zhody našli:

egrep -l hola *.txt

Zobraziť iba vzor alebo slovo hľadané v dokumente:

egrep -o printf hola.c

Pamätajte, že môžete využiť všetky možnosti, ktoré si dokážete predstaviť. Môžete kombinovať niekoľko predtým zobrazených možností alebo ich môžete doplniť o ďalšie možnosti, ako napríklad -An a -Bn, kde n počet riadkov, ktoré chcete zobraziť pred (Pred) a po (Po) zápasu alebo oboch súčasne (C), aby ste videli, čo zápas obklopuje:

egrep -A 2 "printf" hola.c

egrep -B 2 "printf" hola.c

egrep -C 2 printf hola.c

Potlačiť riadky, ktoré obsahujú zhodu, a zobraziť iba tie, ktoré sa nezhodujú:

egrep -v "dos" números.doc

Alebo ak chcete, môžete použiť viac slov alebo zhody s -e, Napríklad:

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

Ak používate -c môže počítať iba počet zápasov, alebo ho invertujte pomocou -v, aby ste zobrazili počet nezodpovedajúcich riadkov. Napríklad:

egrep -c "include" main.c

egrep -v -c "include" main.c

A dokonca zobraziť číslo riadku kde došlo k zápasu, a tiež pozíciu, ktorú zaujíma:

egrep -n "void" hola.c

egrep -o -b "printf" hola.c

A spolu s regulárne výrazy možno rozšíriť jeho možnosti. Nájdite napríklad riadok, ktorý začína na Hello a končí bye, alebo ktorý začína na Hello, nasleduje čokoľvek a potom sa zobrazí zhoda bye:

* Oprava nasledujúceho príkazu: vďaka komentáru čitateľa Manuela Alcocera som mohol zmeniť nasledujúci príkaz, pretože sa vyskytla chyba.

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

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

Ale ak vás zaujíma rozdiel medzi grepom, tu je príklad, ktorý objasní ... V prípade použitia grepu bez -E by ste mali použiť únikové sekvencie takže interpretuje špeciálne znaky ako také, inak by interpretoval vzor ako taký bez toho, aby ich bral do úvahy. Na druhej strane, s egrep alebo grep -E ich vezme do úvahy. Napríklad:
grep '^no\(fork\|group\)' /etc/group

To by sa rovnalo:

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

To znamená, že by hľadal zodpovedajúce riadky, ktoré by začínali reťazcom nofork alebo nogroup. Ale ak ste použili prvý výraz grepu bez únikových sekvencií, urobilo by to hľadanie konkrétny vzor nie (vidlica | skupina):

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

Môžete tiež vyhľadávať alfanumerické rozsahy, alebo konkrétne hodnoty, napríklad na vyhľadanie určitých adries 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

Ak chcete, môžete na vykonanie konkrétnejších vyhľadávaní použiť iné regulárne výrazy. Napríklad | nájsť jednu náhoda alebo druhá:

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

Môžete dokonca vyhľadať veľké, malé písmená, iba abecedné znaky alebo alfanumerické znaky atď., s použitím ďalších výrazov ako: [: alnum:], [: alpha:], [: digit:], [: lower:], [: print:], [: punct:], [: space:], [: horný:] atď. Napríklad na vyhľadanie veľkých písmen:
egrep [[:upper:]] diccioario

Dúfam, že vám to pomôže ... Čoskoro vysvetlím regulárne výrazy v článku venovanom špeciálne tomu ...


Zanechajte svoj komentár

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *

*

*

  1. Zodpovedný za údaje: Miguel Ángel Gatón
  2. Účel údajov: Kontrolný SPAM, správa komentárov.
  3. Legitimácia: Váš súhlas
  4. Oznamovanie údajov: Údaje nebudú poskytnuté tretím stranám, iba ak to vyplýva zo zákona.
  5. Ukladanie dát: Databáza hostená spoločnosťou Occentus Networks (EU)
  6. Práva: Svoje údaje môžete kedykoľvek obmedziť, obnoviť a vymazať.

  1.   Zástupný obrázok pre Manuel Alcocer dijo

    Dobré popoludnie.

    Niekoľko poznámok ...

    Vysvetľujete príkaz „egrep“, ale nedávajte rozdiel medzi „egrep“ a „grep“, ktorý by tu mal byť.

    Napríklad:
    S grep: ip -4 a | grep '[0-9] \ +'
    S egrep: ip -4 a | napr. „[0-9] +“

    Aha, a toto je nesprávne, 'egrep "Ahoj. * Ahoj" example.txt'; úspech tu nastane, keď je v súbore riadok, ktorý obsahuje reťazec „Hello“, za ktorým nasleduje všetko a za ktorým nasleduje „zbohom“, tento riadok môže skutočne začínať a končiť čímkoľvek.

    Toto by povedal článok:
    egrep '^ Dobrý deň. * dovidenia $' example.txt

    A všetky možnosti, alebo takmer všetky (neprestávam to kontrolovať), sú možnosti výhradne „grep“, nie „egrep“.

    S pozdravom.

    1.    Isaac dijo

      Ďakujeme za nahlásenie tejto chyby. To, čo komentujete k regulárnym výrazom, som už uviedol v druhom odseku. Venujem im konkrétny článok, pretože ich je veľa a tento článok by trval príliš dlho. Pozdrav!

      1.    Zástupný obrázok pre Manuel Alcocer dijo

        Ahoj ešte raz, Izák.

        V druhom odseku v podstate hovoríte alebo ste mali povedať, že výraz „egrep“ je alias výrazu „grep -E“, ale neuvádzate žiadny príklad použitia výrazu „egrep“ s nejakým regulárnym výrazom, ktorý je napísaný inak, ako keď ho používa výraz „ grep '.

        Vyhradenie článku na vysvetlenie rozšírených regulárnych výrazov sa mi zdá byť odvážne, okrem iného aj preto, že existujú také stránky, ktoré nerobia reklamu a robia veľmi dôležitú informačnú prácu pre GNU komunitu: https://www.rexegg.com/

        Nepíšem tu pre trollovanie, mojím zámerom pri tomto všetkom je to, že ak niekto číta tento záznam, aby zistil, čo robí „egrep“ alebo „grep“, pozrite sa prosím na iné zdroje, tento záznam nemôže byť odkazom na nič, vysvetľuje to málo, zle. , ponúka nadbytočné informácie a môže byť mätúce, najmä pre tých, ktorí nemajú znalosti GNU a výkonných nástrojov, ktoré ponúka.

        Nakoniec ste pridali a opravili chybu, ktorú som označil po mojom prvom komentári (^ $). Rovnako ako na iných stránkach, aj tu ste mali uviesť osobu, ktorá vykonala opravu, alebo aspoň povedať, že ide o opravu, ktorá je súčasťou základne GNU, teda tej istej základne, s akou bol tento blog založený a kde bol stratený.

        Pozdrav.

        1.    Isaac dijo

          Ďakujem za váš uhol pohľadu.

  2.   fsafs dijo

    ffff