egrep: shembuj komandash në GNU / Linux

egrep

grep është një nga mjetet më të përdorura në rreshtin e komandave GNU / Linux. Pavarësisht se është një mjet shumë i thjeshtë, ju lejon të kryeni një numër të madh operacionesh. Përdoret veçanërisht së bashku me tubat, për të qenë në gjendje të lokalizojmë pika specifike në daljen e një komande të mëparshme, etj. Por ekziston edhe një mjet i njohur si egrep që është ekuivalent me ekzekutimin e grep me opsionin -E.

E vjen nga "Regex i Zgjatur", që është ajo që aktivizon opsionin -E dhe atë që keni në egrep si parazgjedhje pa përdorur atë mundësi. Kjo është, ju mund të përdorni shprehje të rregullta të zgjatura. Në këtë manual nuk do të shpjegoj se cilat janë shprehjet e rregullta, si mund të përdoren dhe cilat lloje janë në * nix. Unë thjesht do të tregoj shembuj praktikë të disa gjërave të dobishme që mund të bëni me egrep ...

grep, egrep dhe fgrep janë të ngjashëm. Në fakt, egrep është ekuivalent me grep -E dhe fgrep është ekuivalent me grep -F. Kjo do të thotë, në rastin që na përket, ai gjithashtu do të interpretojë modelet si shprehje të rregullta.

Ju mundeni kërko për një rresht ose fjalë në një ose më shumë skedarë, siç është gjithashtu rasti me grep. Për shembull, supozoni se dëshironi të kërkoni fjalën ubuntu në një skedar të quajtur snap.txt dhe gjithashtu në të gjithë skedarët .txt në direktorinë aktuale:

egrep ubuntu snap.txt

egrep ubuntu *.txt

Kërkimi mund të jetë gjithashtu rekursiv Për të kërkuar të gjithë përmbajtjen e direktorisë aktuale:

egrep -r "hola mundo" *

Deri më tani, fjalët ose vargjet e sakta u kontrolluan, domethënë, duke marrë parasysh shkronjat e mëdha dhe të vogla (të ndjeshme ndaj shkronjave), por nëse doni ta bëni në modalitetin e pandjeshëm, pa marrë parasysh nëse janë të mëdha apo të vogla, mund të përdorni sa më poshtë (nëse shtoni w gjen vetëm ndeshje të plota):

egrep -i "ejemplo" documento.txt

egrep -iw "ejemplo" documento.txt

Trego, jo rastësitë, por emrat e skedarëve ku u gjetën ato ndeshje:

egrep -l hola *.txt

Tregoni vetëm modelin ose fjalën kontrolluar brenda një dokumenti:

egrep -o printf hola.c

Mos harroni se mund të përdorni të gjitha mundësitë që mund të imagjinoni. Ju mund të kombinoni disa nga opsionet e shikuara më parë, ose mund t'i plotësoni ato me opsione të tjera të tilla si -A n dhe -B n, ku n numri i linjave që dëshironi të tregoni para (Para) dhe Pas (Pas) të ndeshjes ose të dy në të njëjtën kohë (C), në mënyrë që të mund të shihni se çfarë e rrethon ndeshjen:

egrep -A 2 "printf" hola.c

egrep -B 2 "printf" hola.c

egrep -C 2 printf hola.c

Shtyp linjat që përmbajnë një ndeshje dhe tregojnë vetëm ato që nuk përputhen:

egrep -v "dos" números.doc

Ose nëse preferoni, mund ta përdorni fjalë të shumëfishta ose ndeshje me -e. Për shembull:

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

Nëse e përdorni -c mund të numërojë vetëm numrin e ndeshjeve, ose përmbyseni atë me -v për të treguar numrin e vijave të mospërputhura. Për shembull:

egrep -c "include" main.c

egrep -v -c "include" main.c

Dhe madje tregoni numrin e rreshtit ku ka ndodhur ndeshja, dhe gjithashtu pozicionin që zë përkatësisht:

egrep -n "void" hola.c

egrep -o -b "printf" hola.c

Dhe së bashku me shprehje të rregullta aftësitë e tij mund të zgjerohen. Për shembull, gjeni një rresht që fillon me Përshëndetje dhe përfundon me mirupafshim, ose që fillon me Përshëndetje e ndjekur nga çfarëdo dhe pastaj ndeshja bye shfaqet përkatësisht:

* Korrigjimi i komandës së mëposhtme: në sajë të komentit të lexuesit Manuel Alcocer kam qenë në gjendje të modifikoj komandën e mëposhtme, pasi kishte një gabim.

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

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

Por nëse pyesni për ndryshimin me grep, këtu është një shembull që do ta bëjë të qartë ... Në rastin e përdorimit të grep pa -E ju duhet të përdorni sekuencat e arratisjes në mënyrë që të interpretojë personazhet e veçantë si të tillë, përndryshe do ta interpretojë modelin si të tillë pa i marrë ato parasysh. Nga ana tjetër, me egrep ose grep -E do t'i marrë ato parasysh. Për shembull:
grep '^no\(fork\|group\)' /etc/group

Kjo do të ishte ekuivalente me:

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

Kjo do të thotë, do të kërkonte linjat që përputhen duke filluar me nofork ose nogroup. Por nëse keni përdorur shprehjen e parë të grep pa sekuencat e arratisjes, ajo që do të bënte është kërkimi modeli i betonit jo (pirun | grup):

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

Ju gjithashtu mund të kërkoni vargjet alfanumerike, ose vlera specifike, të tilla si për të gjetur IP të caktuara:
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

Nëse preferoni, mund të përdorni shprehje të tjera të rregullta për të bërë kërkime më specifike. Për shembull | për të gjetur një të tillë rastësi apo tjetra:

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

Ju madje mund të gjeni vetëm shkronja të mëdha, të vogla, alfabetike, ose alfanumerike, etj., duke përdorur shprehje të tjera të tilla si: [: alnum:], [: alfa:], [: shifra:], [: e ulët:], [: shtyp:], [: punct:], [: hapësirë:], [ : sipërme:], etj. Për shembull, për të kërkuar për shkronjën e madhe:
egrep [[:upper:]] diccioario

Shpresoj të të ndihmojë ... Së shpejti do t'i shpjegoj shprehjet e rregullta në një artikull kushtuar posaçërisht asaj ...


Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: Miguel Ángel Gatón
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.

  1.   Imazhi i mbajtësit të vendit Manuel Alcocer dijo

    Mirëdita.

    Disa vërejtje ...

    Ju shpjegoni komandën "egrep" por nuk vendosni ndryshimin midis "egrep" dhe "grep", i cili duhet të jetë ai që është këtu.

    Për shembull:
    Me grep: ip -4 a | grep '[0-9] \ +'
    Me egrep: ip -4 a | egrep '[0-9] +'

    Ahh, dhe kjo është e gabuar, 'egrep "Përshëndetje. * Mirupafshim" shembull.txt'; suksesi këtu ndodh kur ka një rresht në skedar që përmban vargun 'Përshëndetje' i ndjekur nga çfarëdo dhe i ndjekur nga 'lamtumirë', linja mund të fillojë dhe të përfundojë me çfarëdo.

    Kjo do të ishte ajo që thotë artikulli:
    egrep '^ Përshëndetje. * lamtumirë $' shembull.txt

    Dhe të gjitha opsionet, ose pothuajse të gjitha (nuk ndalem për ta kontrolluar atë), janë mundësi të 'grep' jo të 'egrep' ekskluzivisht.

    Të fala.

    1.    Isaac dijo

      Faleminderit për raportimin e këtij gabimi. Atë që komentoni për shprehjet e rregullta, unë tashmë e vë atë në paragrafin e dytë. Do t’u kushtoj një artikull specifik atyre, sepse ka shumë dhe ky artikull do të zgjaste shumë. Një përshëndetje!

      1.    Imazhi i mbajtësit të vendit Manuel Alcocer dijo

        Përshëndetje përsëri, Isaac.

        Në paragrafin e dytë ju në thelb thoni, ose duhet të kishit thënë, se 'egrep' është një pseudonim i 'grep -E', por ju nuk jepni ndonjë shembull të përdorimit të 'egrep' me disa shprehje të rregullta që shkruhen ndryshe nga sa përdoret nga ' grep '.

        Përkushtimi i një artikulli për të shpjeguar shprehje të rregullta të zgjeruara më duket i guximshëm, ndër të tjera, sepse ka faqe si kjo që nuk reklamojnë dhe po i bëjnë një punë shumë të rëndësishme informuese komunitetit GNU: https://www.rexegg.com/

        Unë nuk jam duke shkruar këtu për trolling, qëllimi im me të gjitha këto është që nëse dikush lexon këtë hyrje për të parë se çfarë bën 'egrep' ose 'grep', ju lutem shikoni në burime të tjera, kjo hyrje nuk mund të jetë një referencë për asgjë, ajo shpjegon pak, keq , ofron informacion të tepërt dhe mund të jetë konfuz, veçanërisht për ata që nuk kanë njohuri për GNU dhe mjetet e fuqishme që ofron.

        Më në fund, ju keni shtuar dhe rregulluar të metën që tregova pas komentit tim të parë (^ $). Ashtu si në faqet e tjera, ju duhet të kishit cituar personin që bëri korrigjimin, ose të paktën të thoni se është një korrigjim, që është pjesë e bazës së GNU, e njëjta bazë me të cilën u krijua dhe ka qenë ky blog i humbur

        Një përshëndetje.

        1.    Isaac dijo

          Faleminderit për këndvështrimin tuaj.

  2.   fsafs dijo

    ffff