Kakšna je razlika med Grepom, Egrepom in Fgrepom v Linuxu?


Eno od priznanih iskalnih orodij v sistemih, podobnih Unixu, s pomočjo katerega lahko poiščemo kar koli, ne glede na to, ali gre za datoteko ali vrstico ali več vrstic v datoteki, je pripomoček grep. Je zelo obsežne funkcionalnosti, ki jo lahko pripišemo velikemu številu možnosti, ki jih podpira, na primer: iskanje z vzorcem nizov ali vzorcem reg-ex ali reg-ex na osnovi perl itd.

Zaradi različnih funkcionalnosti ima veliko različic, vključno z grep, egrep (razširjeni GREP), fgrep (fiksni GREP), pgrep (postopek GREP), rgrep (rekurzivni GREP) itd. Vendar imajo te različice manjše razlike od prvotnega grepa, zaradi česar so priljubljena in jo uporabljajo različni programerji Linuxa za določene naloge.

Glavno, kar je treba še raziskati, kakšne so razlike med tremi glavnimi različicami, tj. "Grep", "egrep" in "fgrep" grepa, zaradi česar uporabniki Linuxa izberejo eno ali drugo različico glede na zahtevo.

Nekaj posebnih meta-znakov grep

  1. + - enakovredno enemu ali več ponovitvam prejšnjega znaka.
  2. ? - To pomeni skoraj 1 ponovitev prejšnjega znaka. Kot: a? Bi se ujemal z ‘a’ ali ‘aa’.
  3. ( - začetek izraza za izmenjavo.
  4. ) - konec izraza za izmenjavo.
  5. | - Ujemanje katerega koli izraza, ločenega z | . Tako kot: \"(a | b) cde" bi se ujemal z "abcde" ali "bbcde".
  6. { - Ta meta-znak označuje začetek specifikacije obsega. Kot: \"a {2}" se ujema z\"aa" v datoteki, tj. 2-krat.
  7. } - Ta meta-znak označuje specifikator konca obsega.

Razlike med grep, egrep in fgrep

Nekatere glavne razlike med grep, egrep in fgrep lahko poudarimo na naslednji način. Za ta niz primerov predpostavljamo, da je datoteka, na kateri se izvaja operacija:

grep ali Global Regular Expression Print je glavni iskalni program v sistemih, podobnih Unixu, ki lahko išče katero koli vrsto niza v kateri koli datoteki ali seznamu datotek ali celo izhodu katerega koli ukaza.

Kot vzorec iskanja uporablja osnovne regularne izraze poleg običajnih nizov. V osnovnih regularnih izrazih (BRE) so metaznaki, kot so: {,} , (,) , | , + , ? izgubijo svoj pomen in se obravnavajo kot običajni znaki niza, zato jih je treba ubežati, če jih želimo obravnavati kot posebne znake.

Grep uporablja tudi Boyer-Moore algoritem za hitro iskanje katerega koli niza ali regularnega izraza.

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

Tako kot tukaj, ko se ukaz zažene brez ubežajočih () in | , potem poišče celoten niz, tj. \"(f | g) ile" v datoteki. Ko pa so posebni znaki ušli, jih je namesto, da bi jih grep obravnaval kot del niza, obravnaval kot meta-znake in iskal besede \"file" ali \"gile" v datoteki.

Egrep ali grep -E je druga različica grepa ali razširjenega grepa. Ta različica grepa je učinkovita in hitra pri iskanju vzorca regularnega izraza, saj meta-znake obravnava takšne, kot so, in jih ne nadomešča kot nize kot v grepu, zato ste osvobojeni bremena, da bi jim ušli kot v grep. Uporablja ERE ali nabor Extended Regular Expression.

V primeru egrepa, tudi če ne boste ušli metaznakom, jih bo obravnaval kot posebne znake in jih nadomestil zaradi njihovega posebnega pomena, namesto da bi jih obravnaval kot del niza.

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

Tako kot tukaj je tudi egrep iskal niz \"file" , kadar meta-znaki niso bili ubežani, kot bi to pomenilo v pomenu teh znakov. Ko pa so bili ti znaki ubežani, jih je egrep obravnaval kot del niza in v datoteki iskal celoten niz \"(f | g) ile” .

Fgrep ali Fixed grep ali grep -F je še ena različica grepa, ki hitro išče, ko gre za iskanje celotnega niza namesto regularnega izraza, saj ne prepozna regularnih izrazov in nobenih meta-znakov. Za iskanje katerega koli neposrednega niza je treba izbrati različico grep.

Fgrep išče celoten niz in niti ne prepozna posebnih znakov kot del regularnega izraza, tudi če je bil pobegnjen ali ne.

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

Kot, kadar meta-znaki niso bili ubežani, je fgrep iskal celoten niz \"(f | g) ile” v datoteki in ko so bili meta-znaki ubežani, je iskal ukaz fgrep za \"\ (f\| g \) ile" vse znake, kot so v datoteki.

Nekaj praktičnih primerov ukaza grep smo že zajeli, če jih želite izkoristiti iz ukaza grep v Linuxu, jih lahko preberete tukaj.

Zaključek

Zgoraj so poudarjene razlike med "grep", "egrep" in "fgrep". Poleg razlike v naboru uporabljenih regularnih izrazov in hitrosti izvajanja ostanejo parametri preostale ukazne vrstice enaki za vse tri različice grepa in celo namesto\"egrep" ali\"fgrep",\"grep -E" ali\"grep -F" je priporočljivo za uporabo.

Če med temi tremi različicami grepa ugotovite še kakšne druge razlike, jih omenite v komentarjih.