egrep: ekzemploj de la komando en GNU / Linukso

egrep

grep ĝi estas unu el la plej uzataj iloj en la komandlinio GNU / Linukso. Malgraŭ esti tre simpla ilo, ĝi permesas al vi plenumi multajn operaciojn. Ĝi estas uzata precipe kune kun tuboj, por povi lokalizi specifajn punktojn en la eliro de antaŭa komando, ktp. Sed ekzistas ankaŭ ilo konata kiel egrep, kiu ekvivalentas al rula grep kun la opcio -E.

La e venas de "Plilongigita regex", kiu aktivigas la -E-opcion kaj kion vi havas egrep defaŭlte sen uzi tiun opcion. Tio estas, vi povas uzi la plilongigitaj regulaj esprimoj. En ĉi tiu lernilo mi ne eksplikos, kio estas regulaj esprimoj, kiel ili povas esti uzataj kaj kiaj tipoj estas en * nix. Mi nur montros praktikajn ekzemplojn de iuj utilaj aferoj, kiujn vi povas fari kun egrep ...

grep, egrep kaj fgrep estas similaj. Fakte egrep ekvivalentas al grep -E kaj fgrep ekvivalentas al grep -F. Tio estas, en la kazo, kiu koncernas nin, ĝi ankaŭ interpretos la ŝablonojn kiel regulajn esprimojn.

Vi povas serĉi linion aŭ vorton en unu aŭ pluraj dosieroj, kiel ankaŭ okazas kun grep. Ekzemple, supozu, ke vi volas serĉi la vorton ubuntu en dosiero nomata snap.txt kaj ankaŭ en ĉiuj .txt-dosieroj en la aktuala dosierujo:

egrep ubuntu snap.txt

egrep ubuntu *.txt

Serĉo ankaŭ povas esti rekursiva Por serĉi la tutan enhavon de la nuna dosierujo:

egrep -r "hola mundo" *

Ĝis nun oni serĉis ĝustajn vortojn aŭ ĉenojn, tio estas, konsiderante majusklojn kaj minusklojn (minuskle), sed se vi volas fari ĝin laŭ minuskla majuskla reĝimo, negrave ĉu ili estas majuskloj aŭ minuskloj, vi povas uzi la jenajn (se vi aldonas w, ĝi trovas nur kompletajn kongruojn):

egrep -i "ejemplo" documento.txt

egrep -iw "ejemplo" documento.txt

Montru, ne la koincidojn, sed la dosiernomoj kie tiuj matĉoj estis trovitaj:

egrep -l hola *.txt

Montru nur la ŝablonon aŭ vorton serĉita en dokumento:

egrep -o printf hola.c

Memoru, ke vi povas uzi ĉiujn eblojn, kiujn vi povas imagi. Vi povas kombini plurajn el la antaŭe viditaj opcioj, aŭ vi povas kompletigi ilin per aliaj ebloj kiel -A n kaj -B n, kie n la nombro de linioj, kiujn vi volas montri antaŭ (Antaŭ) kaj post (Post) de la matĉo aŭ ambaŭ samtempe (C), tiel ke vi povas vidi, kio ĉirkaŭas la matĉon:

egrep -A 2 "printf" hola.c

egrep -B 2 "printf" hola.c

egrep -C 2 printf hola.c

Subpremu la liniojn, kiuj enhavas kongruon kaj montras nur tiujn, kiuj ne kongruas:

egrep -v "dos" números.doc

Aŭ se vi preferas, vi povas uzi multoblaj vortoj aŭ kongruoj kun -e. Ekzemple:

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

Se vi uzas -c povas kalkuli nur la nombron de matĉoj, aŭ inversigu ĝin per -v por montri la nombron de malakordaj linioj. Ekzemple:

egrep -c "include" main.c

egrep -v -c "include" main.c

Kaj eĉ montri linionumeron kie la matĉo okazis, kaj ankaŭ la pozicion ĝi okupas respektive:

egrep -n "void" hola.c

egrep -o -b "printf" hola.c

Kaj kune kun la regulaj esprimoj ĝiaj kapabloj povas esti vastigitaj. Ekzemple, trovu linion, kiu komenciĝas per Saluton kaj finiĝas per ĝis, aŭ kiu komenciĝas per Saluton sekvata de kio ajn kaj tiam la kongrua ĝis aperas respektive:

* Korekto de la jena komando: danke al la komento de la leganto Manuel Alcocer mi povis modifi la jenan komandon, ĉar okazis eraro.

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

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

Sed se vi scivolas pri la diferenco kun grep, jen ekzemplo, kiu klarigos al vi ... En la kazo de uzi grep sen -E vi devas uzi la eskapaj sekvencoj tiel ke ĝi interpretas la specialajn signojn kiel tiajn, alie ĝi interpretus la ŝablonon kiel tia sen konsideri ilin. Aliflanke, kun egrep aŭ grep -E ĝi konsideros ilin. Ekzemple:
grep '^no\(fork\|group\)' /etc/group

Tio ekvivalentus al:

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

Tio estas, ĝi serĉus la kongruajn liniojn, kiuj komenciĝas per nofork aŭ nogrupo. Sed se vi uzus la unuan esprimon de grep sen la eskapaj sekvencoj, kion ĝi farus estas serĉi la konkreta ŝablono ne (forko | grupo):

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

Vi ankaŭ povas serĉi alfanombraj gamoj, aŭ specifaj valoroj, kiel ekzemple lokalizi iujn IPojn:
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

Se vi preferas, vi povas uzi aliajn regulajn esprimojn por fari pli specifajn serĉojn. Ekzemple | trovi unu koincido aŭ la alia:

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

Vi eĉ povas lokalizi majuskloj, minuskloj, nur alfabetaj signoj aŭ alfanombraj, ktp., uzante aliajn esprimojn kiel: [: alnum:], [: alpha:], [: digit:], [: lower:], [: print:], [: punct:], [: space:], [ : supra:], ktp. Ekzemple, por serĉi majusklojn:
egrep [[:upper:]] diccioario

Mi esperas, ke ĝi helpos vin ... Baldaŭ mi klarigos regulajn esprimojn en artikolo dediĉita al ĝi specife ...


La enhavo de la artikolo aliĝas al niaj principoj de redakcia etiko. Por raporti eraron alklaku Ĉi tie.

5 komentoj, lasu la viajn

Lasu vian komenton

Via retpoŝta adreso ne estos eldonita. Postulita kampojn estas markita per *

*

*

  1. Respondeculo pri la datumoj: Miguel Ángel Gatón
  2. Celo de la datumoj: Kontrola SPAM, administrado de komentoj.
  3. Legitimado: Via konsento
  4. Komunikado de la datumoj: La datumoj ne estos komunikitaj al triaj krom per laŭleĝa devo.
  5. Stokado de datumoj: Datumbazo gastigita de Occentus Networks (EU)
  6. Rajtoj: Iam ajn vi povas limigi, retrovi kaj forigi viajn informojn.

  1.   Manuel Alcocer lokokupilo bildo diris

    Buenas malfruas.

    Kelkaj rimarkoj ...

    Vi klarigas la ordonon 'egrep' sed ne diferencigu inter 'egrep' kaj 'grep', kio devus esti tia, kia ĝi estas ĉi tie.

    Ekzemple:
    Kun grep: ip -4 a | grep '[0-9] \ +'
    Kun egrep: ip -4 a | egrep '[0-9] +'

    Ahh, kaj ĉi tio estas malĝusta, 'egrep "Saluton. * Ĝis" ekzemplo.txt'; la sukceso ĉi tie okazas kiam estas linio en la dosiero, kiu enhavas la ĉenon 'Saluton' sekvata de kio ajn kaj sekvita de 'adiaŭ', la linio povas vere komenciĝi kaj finiĝi per kio ajn.

    Ĉi tio estus, kion diras la artikolo:
    egrep '^ Saluton. * ĝis $' example.txt

    Kaj ĉiuj ebloj, aŭ preskaŭ ĉiuj (mi ne ĉesas kontroli ĝin), estas ebloj de 'grep' ne de 'egrep' ekskluzive.

    Afablajn salutojn.

    1.    isaac diris

      Dankon pro raporti tiun eraron. Kion vi komentas pri la regulaj esprimoj, mi jam metis ĝin en la duan alineon. Mi dediĉos specifan artikolon al ili, ĉar estas multaj kaj ĉi tiu artikolo daŭrus tro longe. Saluton!

      1.    Manuel Alcocer lokokupilo bildo diris

        Saluton denove, Isaak.

        En la dua alineo vi esence diras, aŭ devus diri, ke 'egrep' estas kaŝnomo de 'grep -E', sed vi ne donas ekzemplon pri uzado de 'egrep' kun iu regula esprimo, kiu estas skribita malsame ol kiam uzata de 'grep'.

        Dediĉi artikolon por klarigi plilongigitajn regulajn esprimojn ŝajnas kuraĝa al mi, interalie ĉar ekzistas tiaj retejoj, kiuj ne reklamas kaj faras tre gravan informan laboron al la GNU-komunumo: https://www.rexegg.com/

        Mi ne skribas ĉi tie por trolo, mia intenco kun ĉio ĉi estas, ke se iu legas ĉi tiun eniron por vidi, kion faras 'egrep' aŭ 'grep', bonvolu rigardi aliajn fontojn, ĉi tiu eniro ne povas esti referenco al io ajn, ĝi klarigas malmulton. , malbone, ofertas superfluajn informojn kaj povas esti konfuza, precipe por tiuj, kiuj ne konas GNU kaj la potencajn ilojn, kiujn ĝi ofertas.

        Fine vi aldonis kaj riparis la cimon, kiun mi indikis post mia unua komento (^ $). Kiel en aliaj retejoj, vi devintus citi la homon, kiu faris la korekton, aŭ almenaŭ diri, ke ĝi estas korekto, kiu estas parto de la GNU-bazo, la sama bazo kun kiu ĉi tiu blogo estis komencita kaj perdiĝis.

        Un saluto.

        1.    isaac diris

          Dankon pro via vidpunkto.

  2.   fsafs diris

    ffsaf