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 ...
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.
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!
Š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.
Hvala za vaše stališče.
ffff