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 ...
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.
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!
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.
Faleminderit për këndvështrimin tuaj.
ffff