Koja je razlika između Grep, Egrep i Fgrep u Linuxu?


Jedan od poznatih alata za pretraživanje na sistemima sličnim Unixu koji se može koristiti za traženje bilo čega bez obzira da li se radi o fajlu, liniji ili više redova u datoteci je uslužni program grep. Veoma je široka u funkcionalnosti što se može pripisati velikom broju opcija koje podržava kao što su: pretraživanje pomoću string patterna, ili reg-ex šablona ili reg-ex baziranog na perl itd.

Zbog svojih različitih funkcionalnosti, ima mnogo varijanti uključujući grep, egrep (Prošireni GREP), fgrep ( >Fiksni GREP), pgrep (Proces GREP), rgrep (Rekurzivni GREP) itd. Ali ove varijante imaju male razlike u odnosu na originalni grep što ih je učinilo popularnim i da ih koriste različiti Linux programeri za specifične zadatke.

Glavna stvar koja ostaje da se istraži je koje su razlike između tri glavne varijante, tj. 'grep', 'egrep' i 'fgrep' grep koji tjera korisnike Linuxa da biraju jednu ili drugu verziju prema zahtjevu.

Neki posebni meta-karakteri grep

  1. + – Ekvivalentno jednom ili više pojavljivanja prethodnog znaka.
  2. ? – Ovo označava skoro 1 ponavljanje prethodnog znaka. Sviđa vam se: a? Odgovara ‘a’ ili ‘aa’.
  3. ( – Početak alternativnog izraza.
  4. ) – Kraj alternacionog izraza.
  5. | – Podudaranje bilo kojeg od izraza odvojenih sa '|'. Kao: “(a|b)cde ” bi odgovarao ili ‘abcde’ ili ‘bbcde’.
  6. { – Ovaj meta-znak označava početak specifikacije opsega. Sviđa mi se: “a{2} ” odgovara “aa ” u datoteci, tj. a 2 puta.
  7. } – Ovaj meta-znak označava kraj specifikacije opsega.

Razlike između grep, egrep i fgrep

Neke glavne razlike između grep, egrep i fgrep mogu se istaknuti na sljedeći način. Za ovaj skup primjera pretpostavljamo da je datoteka na kojoj se izvodi operacija:

Grep Command

grep ili Global Regular Expression Print je glavni program za pretraživanje na sistemima sličnim Unixu koji može pretraživati bilo koju vrstu niza na bilo kojoj datoteci ili listi datoteka ili čak izlaz bilo kojeg komanda.

Preporučeno čitanje: 12 praktičnih primjera Linux komande grep

Koristi osnovne regularne izraze osim normalnih stringova kao obrazac pretraživanja. U osnovnim regularnim izrazima (BRE), meta-znakovi poput: '{','}','(',')','|','+','?' gube svoje značenje i tretiraju se kao normalni znakovi niza i moraju se izbjeći ako se trebaju tretirati kao posebni znakovi .

Predloženo čitanje: 11 naprednih 'Grep' naredbi o klasama znakova i izrazima zagrada

Takođe, grep koristi Boyer-Moore algoritam za brzo pretraživanje bilo kojeg stringa ili regularnog izraza.

grep -C 0 '(f|g)ile' check_file
grep -C 0 '\(f\|g\)ile' check_file

Kao ovdje, kada se naredba pokrene bez izbjegavanja '(' ')' i '|' onda je tražila kompletan niz, tj. “(f|g )ile ” u datoteci. Ali kada su specijalni znakovi izbjegnuti, tada ih je, umjesto da ih tretira kao dio niza, grep tretirao kao meta znakove i tražio riječi “file ” ili “gile ” u fajlu.

Egrep Command

Egrep ili grep -E je druga verzija grep ili Extended grep. Ova verzija grep-a je efikasna i brza kada je u pitanju traženje obrasca regularnog izraza jer meta-karakte tretira onakvima kakvi jesu i ne zamjenjuje ih kao nizove kao u grep-u, pa ste stoga oslobođeni tereta izbjegavanja kao u grep. Koristi ERE ili skup proširenih regularnih izraza.

U slučaju egrep-a, čak i ako ne izbjegnete meta znakove, on će ih tretirati kao posebne znakove i zamijeniti ih za njihovo posebno značenje umjesto da ih tretira kao dio niza.

egrep -C 0 '(f|g)ile' check_file
egrep -C 0 '\(f\|g\)ile' check_file

Kao ovdje, egrep je tražio string “file ” kada meta-znakovi nisu bili izbačeni kao što bi to značilo značenje ovih znakova. Ali, kada su ovi znakovi izbjegnuti, egrep ih je tretirao kao dio stringa i tražio kompletan niz “(f|g)ile ” u datoteci.

fgrep naredba

Fgrep ili Fiksni grep ili grep -F je još jedna verzija grep koja je brza u pretraživanju kada je u pitanju traženje cijelog niza umjesto regularnog izraza jer ne prepoznaje regularne izraze, niti bilo kakve meta-karakte. Za pretraživanje bilo kojeg direktnog niza, ovo je verzija grep-a koju treba odabrati.

Fgrep traži kompletan string i čak ne prepoznaje posebne znakove kao dio regularnog izraza čak i ako je escaped ili ne.

fgrep -C 0 '(f|g)ile' check_file
fgrep -C 0 '\(f\|g\)ile' check_file

Na primjer, kada meta-znakovi nisu izbjegnuti, fgrep je tražio kompletan niz “(f|g)ile ” u datoteci, a kada su meta-znakovi izbjegnuti, tada je komanda fgrep tražila “\(f\|g\)ile ” svi znakovi kao što je u datoteci.

Već smo pokrili neke praktične primjere naredbe grep, koje možete pročitati ovdje, ako želite da dobijete više od naredbe grep u Linuxu.

Naučite 12 praktičnih primjera Linux komande grep

Zaključak

Gore su istaknute razlike između ‘grep’, ‘egrep’ i ‘fgrep’. Osim razlike u skupu korištenih regularnih izraza i brzini izvršavanja, ostali parametri komandne linije ostaju isti za sve tri verzije grep-a, pa čak i umjesto “egrep” ili “fgrep”, “grep -E” ili “grep - F ” preporučuje se upotreba.

Ako nađete bilo koju drugu razliku između ove tri verzije grep-a, spomenite ih u svojim komentarima.