20 korisnih primjera naredbi egrep u Linuxu


Ukratko: u ovom ćemo vodiču raspravljati o nekim praktičnim primjerima naredbe egrep. Nakon što slijede ovaj vodič, korisnici će moći učinkovitije pretraživati tekst u Linuxu.

Jeste li ikada bili frustrirani jer ne možete pronaći potrebne informacije u zapisima? Izdvajanje potrebnih informacija iz velikog skupa podataka složen je i dugotrajan zadatak.

Stvari postaju zaista izazovne ako operativni sustav ne nudi prave alate i tu dolazi Linux da vas spasi. Linux nudi razne alate za filtriranje teksta kao što su sed, cut itd.

Međutim, egrep je jedan od najmoćnijih i najčešće korištenih uslužnih programa za obradu teksta u Linuxu, a mi ćemo raspravljati o nekim primjerima naredbe egrep.

Naredba egrep u Linuxu prepoznaje se po obitelji naredbi grep, koja se koristi za pretraživanje i podudaranje s određenim uzorkom u datotekama. Radi slično kao grep -E (grep Extended regex), ali uglavnom pretražuje određenu datoteku ili čak redak do retka ili ispisuje redak u datoj datoteci.

Sintaksa naredbe egrep je sljedeća:

$ egrep [OPTIONS] PATTERNS [FILES]

Stvorimo oglednu tekstualnu datoteku sa sljedećim sadržajem kao primjer:

$ cat sample.txt

Ovdje možemo vidjeti da je tekstualna datoteka spremna. Sada raspravimo nekoliko uobičajenih primjera koji se mogu koristiti svakodnevno.

Počnimo s jednostavnim primjerom podudaranja uzorka, gdje možemo upotrijebiti naredbu u nastavku za traženje niza professional u datoteci sample.txt:

$ egrep professionals sample.txt

Ovdje možemo vidjeti da naredba ispisuje redak koji sadrži navedeni uzorak.

Ispis možemo učiniti informativnijim isticanjem odgovarajućeg uzorka. Da bismo to postigli, možemo koristiti opciju --color naredbe egrep. Na primjer, donja naredba označit će tekst profesionalci crvenom bojom:

$ egrep --color=auto professionals sample.txt

Ovdje možemo vidjeti da je isti izlaz informativniji u usporedbi s prethodnim. Također, lako možemo prepoznati da se riječ profesionalci ponavlja dva puta.

Na većini Linux sustava gornja postavka omogućena je prema zadanim postavkama koristeći sljedeći alias:

$ alias egrep='egrep –color=auto'

Naredba egrep prihvaća više datoteka kao argument, što nam omogućuje traženje određenog uzorka u više datoteka. Shvatimo ovo na primjeru.

Najprije izradite kopiju datoteke sample.txt:

$ cp sample.txt sample-copy.txt

Sada pretražite uzorak professionals u obje datoteke:

$ egrep professionals sample.txt sample-copy.txt 

U gornjem primjeru, možemo vidjeti naziv datoteke u izlazu, koji predstavlja odgovarajući redak iz te datoteke.

Ponekad samo trebamo saznati postoji li uzorak u datoteci ili ne. Ako da, u koliko je redaka prisutan? U takvim slučajevima možemo koristiti opciju -c naredbe.

Na primjer, donja naredba prikazat će 1 kao izlaz jer je riječ professionals prisutna u samo jednom retku.

$ egrep -c professionals sample.txt

1

U prethodnom primjeru vidjeli smo da opcija -c ne broji broj pojavljivanja uzorka. Na primjer, riječ profesionalci pojavljuje se dva puta u istom retku, ali opcija -c tretira je kao samo jedno podudaranje.

U takvim slučajevima možemo upotrijebiti opciju -o naredbe za ispis samo odgovarajućeg uzorka. Na primjer, donja naredba prikazat će riječ profesionalci u dva odvojena retka:

$ egrep -o professionals sample.txt

Sada prebrojimo retke pomoću naredbe wc:

$ egrep -o professionals sample.txt | wc -l

U gornjem primjeru koristili smo kombinaciju egrep i wc naredbi za brojanje broja pojavljivanja određenog uzorka.

Prema zadanim postavkama, egrep izvodi podudaranje uzoraka na način koji razlikuje velika i mala slova. To znači riječi - mi, mi, mi i MI se tretiraju kao različite riječi. Međutim, možemo nametnuti pretraživanje koje ne razlikuje velika i mala slova pomoću opcije -i.

Na primjer, u donjoj naredbi podudaranje uzorka uspjet će za tekst mi i Mi:

$ egrep -i we sample.txt 

U prethodnom primjeru vidjeli smo da naredba egrep izvodi djelomično podudaranje. Na primjer, kada smo tražili tekst mi, podudaranje uzorka je uspjelo i za druge tekstove. Kao što su web, web stranica i bili.

Da bismo nadvladali ovo ograničenje, možemo koristiti opciju -w, koja nameće podudaranje cijele riječi.

$ egrep -w we sample.txt

Do sada smo koristili naredbu egrep za ispis redaka u kojima se nalazi zadani uzorak. Međutim, ponekad želimo operaciju izvesti na suprotan način.

Na primjer, možemo htjeti ispisati retke u kojima zadani uzorak nije prisutan. To možemo postići uz pomoć -v opcije:

$ egrep -v we sample.txt

Ovdje možemo vidjeti da naredba ispisuje sav redak koji ne sadrži tekst we.

Možemo upotrijebiti opciju -n naredbe da omogućimo numeriranje redaka, koji prikazuje broj retka u izlazu kada usklađivanje uzorka uspije. Ovaj jednostavan trik čini rezultat smislenijim.

$ egrep -n professionals sample.txt

U gornjem izlazu možemo vidjeti da je riječ profesionalci prisutna u 5. retku.

U tihom načinu rada, naredba egrep ne ispisuje odgovarajući uzorak. Dakle, moramo upotrijebiti povratnu vrijednost naredbe kako bismo utvrdili je li podudaranje uzoraka uspjelo ili nije.

Možemo upotrijebiti opciju -q naredbe da omogućimo tihi način rada, što je zgodno prilikom pisanja skripti ljuske.

$ egrep -q professionals sample.txt
$ egrep -q non-existing-pattern sample.txt

U ovom primjeru, povratna vrijednost nula ukazuje na prisutnost uzorka, dok vrijednost različita od nule ukazuje na odsutnost uzorka.

Ponekad ima smisla prikazati nekoliko linija oko odgovarajućeg uzorka. Za takve scenarije možemo koristiti opciju -B naredbe, koja prikazuje N redaka prije odgovarajućeg uzorka.

Na primjer, donja naredba ispisat će redak za koji je uspjelo podudaranje uzorka, kao i 2 retka prije njega.

$ egrep -B 2 -n professionals sample.txt 

U ovom smo primjeru upotrijebili opciju -n za prikaz brojeva redaka.

Na sličan način možemo koristiti opciju -A naredbe za prikaz redaka nakon podudaranja uzorka. Na primjer, donja naredba ispisat će redak za koji je uspjelo podudaranje uzorka, kao i sljedeća 2 retka.

$ egrep -A 2 -n professionals sample.txt

Osim toga, naredba egrep podržava opciju -C koja kombinira funkcionalnost opcija -A i -B, što prikazuje crte prije i poslije usklađenog uzorka.

$ egrep -C 2 -n professionals sample.txt 

Kao što je prethodno objašnjeno, možemo izvršiti podudaranje uzoraka na više datoteka. Međutim, situacija postaje škakljiva kada su datoteke prisutne u više poddirektorija i mi ih sve prosljeđujemo kao argumente naredbe.

U takvim slučajevima možemo izvršiti podudaranje uzorka na rekurzivan način pomoću opcije -r kao što je prikazano u sljedećem primjeru.

Najprije stvorite 2 poddirektorija i u njih kopirajte datoteku sample.txt:

$ mkdir -p dir1/dir2
$ cp sample.txt dir1/
$ cp sample.txt dir1/dir2/

Izvedimo sada operaciju pretraživanja na rekurzivan način:

$ egrep -r professionals dir1

U gornjem primjeru možemo vidjeti da je podudaranje uzorka uspjelo za datoteke dir1/dir2/sample.txt i dir1/sample.txt.

Možemo upotrijebiti znak (.) za podudaranje bilo kojeg pojedinačnog znaka osim za kraj retka. Na primjer, regularni izraz u nastavku odgovara tekstu har, hat i ima:

$ egrep "ha." sample.txt

Možemo koristiti zvjezdicu (*) za podudaranje s nula ili više pojavljivanja prethodnog znaka. Na primjer, donji regularni izraz odgovara tekstu koji sadrži niz we iza kojeg slijedi nula ili više pojavljivanja znaka b.

$ egrep "web*" sample.txt

Možemo koristiti plus (+) za podudaranje jednog ili više pojavljivanja prethodnog znaka. Na primjer, donji regularni izraz odgovara tekstu koji sadrži niz we iza kojeg slijedi barem jedno pojavljivanje znaka b.

$ egrep "web+" sample.txt

Ovdje možemo vidjeti da podudaranje uzoraka ne uspijeva za riječi - mi i bili, zbog nepostojanja znaka b.

Možemo koristiti znak za umetanje (^) za predstavljanje početka retka. Na primjer, donji regularni izraz ispisuje retke koji počinju tekstom Mi:

$ egrep "^We" sample.txt

Možemo koristiti dolar ($) za predstavljanje kraja retka. Na primjer, donji regularni izraz ispisuje retke koji završavaju tekstom e.:

$ egrep "e.$" sample.txt

Možemo upotrijebiti znak za umetanje (^) odmah iza kojeg slijedi dolar ($) za predstavljanje praznog retka. Upotrijebimo ovo u regularnom izrazu za uklanjanje praznih redaka:

$ egrep -n -v "^$" sample.txt

U gornjem izlazu možemo vidjeti da brojevi redaka 2, 4, 6, 8 i 10 nisu prikazani jer su prazni.

U ovom smo članku raspravljali o nekim korisnim primjerima naredbi egrep. Ovi se primjeri mogu koristiti u svakodnevnom životu za poboljšanje produktivnosti.

Znate li za neki drugi najbolji primjer naredbe egrep u Linuxu? Recite nam svoje stavove u komentarima ispod.