Koja je razlika između Grepa, Egrepa i Fgrepa u Linuxu?


Jedan od poznatih alata za pretraživanje na Unix-sličnim sustavima koji se može koristiti za traženje bilo čega, bilo da se radi o datoteci ili liniji ili više redaka u datoteci, je uslužni program grep. Funkcije je vrlo bogate, što se može pripisati velikom broju opcija koje podržava, poput pretraživanja pomoću uzorka niza, reg-ex uzorka ili reg-ex temeljenog na perlu itd.

Zbog 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 manje razlike u odnosu na originalni grep koji ih je stvorio popularan i koji ga razni programeri Linuxa koriste za određene zadatke.

Glavna stvar koju treba istražiti jesu koje su razlike između tri glavne varijante, tj. "Grep", "egrep" i "fgrep" grepa zbog čega korisnici Linuxa biraju jednu ili drugu verziju prema zahtjevu.

Neki posebni meta-likovi grepa

  1. + - ekvivalent jednom ili više pojavljivanja prethodnog znaka.
  2. ? - Ovo označava gotovo 1 ponavljanje prethodnog znaka. Kao: a? odgovara li "a" ili "aa".
  3. ( - Početak izraza alternacije.
  4. ) - Kraj izraza alternacije.
  5. | - podudaranje bilo kojeg izraza odvojenog | . Poput: "(a | b) cde" odgovarao bi ili "abcde" ili "bbcde".
  6. { - Ovaj meta-znak označava početak specifikacije raspona. Kao: "a {2}" podudara se s "aa" u datoteci, tj. 2 puta.
  7. } - Ovaj meta-znak označava specifikator kraja raspona.

Razlike između grepa, egrepa i fgrepa

Neke glavne razlike između grep, egrep i fgrep mogu se istaknuti kako slijedi. Za ovaj niz primjera pretpostavljamo da je datoteka na kojoj se izvodi operacija:

grep ili Global Regular Expression Print glavni je program za pretraživanje na sustavima sličnim Unixu koji može pretraživati bilo koju vrstu niza u bilo kojoj datoteci ili popisu datoteka ili čak izlaz bilo koje naredbe.

Kao obrazac pretraživanja koristi osnovne regularne izraze, osim uobičajenih nizova. U osnovnim regularnim izrazima (BRE), meta-znakovi poput: {,} , (,) , | , + , ? gube svoje značenje i tretiraju se kao normalni znakovi niza te ih treba izbjeći ako ih se želi tretirati kao posebne znakove.

Također, grep koristi Boyer-Mooreov algoritam za brzo pretraživanje bilo kojeg niza ili regularnog izraza.

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

Kao ovdje, kada se naredba izvodi bez ekrana () i | , tada je tražila cijeli niz tj. "(f | g) ile" u datoteci. No, kada su izbjegnuti posebni znakovi, umjesto da ih tretira kao dio niza, grep ih je tretirao kao meta-znakove i tražio riječi "datoteka" ili "gile" u spisu.

Egrep ili grep -E je druga verzija grepa ili proširenog grepa. Ova verzija grepa učinkovita je i brza kada je riječ o pretraživanju uzorka regularnog izraza jer se meta-znakovima odnosi onako kako jest i ne zamjenjuje ih kao nizove kao u grepu, pa ste oslobođeni tereta da ih pobjegnete kao u grep. Koristi ERE ili prošireni regularni izraz.

U slučaju egrepa, čak i ako ne pobjegnete od meta-znakova, on će ih tretirati kao posebne znakove i zamijeniti im 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 i ovdje, egrep je tražio niz "datoteka" kada meta-znakovi nisu izbjegnuti, što bi značilo pod značenjem tih znakova. Ali, kad su ti znakovi pobjegli, tada ih je egrep tretirao kao dio niza i u datoteci tražio cjeloviti niz “(f | g) ile” .

Fgrep ili Fixed grep ili grep -F je još jedna verzija grepa koja je brza u pretraživanju kada je riječ o pretraživanju cijelog niza umjesto regularnog izraza jer ne prepoznaje regularne izraze, niti bilo koje meta-znakove. Za pretraživanje bilo kojeg izravnog niza, ovo je verzija grep-a koju treba odabrati.

Fgrep traži cjeloviti niz i čak ne prepoznaje posebne znakove kao dio regularnog izraza, čak i ako je pobjegao ili nije.

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

Kao, kada meta-znakovi nisu izbjegnuti, fgrep je tražio kompletan niz “(f | g) ile” u datoteci, a kada su meta-znakovi izbjegnuti, tada je tražila naredba fgrep “\ (f\| g \) ile” sve znakove kao u datoteci.

Već smo obradili neke praktične primjere naredbe grep, a možete ih pročitati ovdje ako želite iskoristiti više od naredbe grep u Linuxu.

Zaključak

Iznad su istaknute razlike između "grep", "egrep" i "fgrep". Osim razlike u skupu korištenih regularnih izraza i brzine izvršavanja, parametri naredbenog retka rest ostaju isti za sve tri verzije grep-a, čak i umjesto "egrep" ili "fgrep", "grep -E" ili "grep - F ”preporuča se koristiti.

Ako utvrdite bilo kakve druge razlike između ove tri verzije grepa, spomenite ih u svojim komentarima.