Vyhledávání na webu

Jaký je rozdíl mezi Grep, Egrep a Fgrep v Linuxu?


Jedním z renomovaných vyhledávacích nástrojů na systémech podobných Unixu, který lze použít k hledání čehokoli, ať už jde o soubor, řádek nebo více řádků v souboru, je nástroj grep. Je velmi rozsáhlá ve funkčnosti, což lze přičíst velkému počtu možností, které podporuje, jako je: vyhledávání pomocí vzoru řetězce nebo vzoru reg-ex nebo reg-ex založeného na perlu atd.

Díky svým různým funkcím má mnoho variant včetně grep, egrep (Extended GREP), fgrep (Opravený GREP), pgrep (Proces GREP), rgrep (Rekurzivní GREP) atd. Tyto varianty se však oproti původnímu grep mírně liší, díky čemuž jsou populární a mohou být používány různými linuxovými programátory pro specifické úkoly.

Hlavní věc, kterou je třeba prozkoumat, je, jaké jsou rozdíly mezi třemi hlavními variantami, tj. 'grep', 'egrep' a 'fgrep' grep, který umožňuje uživatelům Linuxu vybrat si jednu nebo druhou verzi podle požadavků.

Některé speciální metaznaky grep

  1. + – Ekvivalent jednoho nebo více výskytů předchozího znaku.
  2. ? – Označuje téměř 1 opakování předchozího znaku. Jako: a? Odpovídá ‘a‘ nebo ‘aa‘.
  3. ( – začátek alternačního výrazu.
  4. ) – Konec alternačního výrazu.
  5. | – Odpovídá jednomu z výrazů oddělených '|'. Jako: „(a|b)cde “ by odpovídalo buď ‘abcde‘ nebo ‘bbcde‘.
  6. { – Tento metaznak označuje začátek specifikátoru rozsahu. Jako: “a{2} “ odpovídá “aa ” v souboru, tj. a 2krát.
  7. } – Tento metaznak označuje specifikátor konce rozsahu.

Rozdíly mezi grep, egrep a fgrep

Některé hlavní rozdíly mezi grep, egrep a fgrep lze zvýraznit následovně. Pro tuto sadu příkladů předpokládáme, že soubor, na kterém se operace provádí, bude:

Příkaz Grep

grep nebo Global Regular Expression Print je hlavní vyhledávací program na systémech typu Unix, který dokáže vyhledat jakýkoli typ řetězce v jakémkoli souboru nebo seznamu souborů nebo dokonce na výstupu libovolného příkaz.

Doporučená četba: 12 praktických příkladů linuxového příkazu grep

Jako vzor vyhledávání používá kromě normálních řetězců Základní regulární výrazy. V základních regulárních výrazech (BRE) metaznaky jako: '{','}','(',')','|','+','?' ztrácejí svůj význam a je s nimi zacházeno jako s normálními znaky řetězce a je třeba je zakódovat, pokud mají být považovány za speciální znaky .

Doporučená četba: 11 rozšířených příkazů „Grep“ pro třídy znaků a výrazy v závorkách

Také grep používá Boyer-Mooreův algoritmus pro rychlé vyhledávání libovolného řetězce nebo regulárního výrazu.

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

Jako zde, když je příkaz spuštěn bez escapování '(' ')' a '|', pak hledal celý řetězec, tj. “(f|g )ile “ v souboru. Ale když byly speciální znaky escapovány, místo toho, aby je grep považoval za součást řetězce, zacházel s nimi jako s metaznaky a hledal slova “file ” nebo “gile ” v souboru.

Příkaz Egrep

Egrep nebo grep -E je další verze grep nebo rozšířeného grepu. Tato verze grep je efektivní a rychlá, pokud jde o hledání vzoru regulárního výrazu, protože zachází s metaznaky tak, jak jsou, a nenahrazuje je jako řetězce jako v grep, a proto jste osvobozeni od břemene unikání jako v grep. Používá ERE nebo sadu Extended Regular Expression.

V případě egrep, i když neuniknete metaznakům, bude s nimi zacházet jako se speciálními znaky a nahradí je jejich speciálním významem místo toho, aby je považoval za součást řetězce.

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

Podobně jako zde, egrep hledal řetězec “file ”, když metaznaky nebyly escapovány, jak by to znamenalo podle významu těchto znaků. Ale když byly tyto znaky escapovány, egrep je považoval za součást řetězce a hledal v souboru úplný řetězec “(f|g)ile ”.

Příkaz fgrep

Fgrep nebo Fixed grep nebo grep -F je další verze grep, která je rychlá ve vyhledávání, pokud jde o hledání celého řetězce místo regulárního výrazu, protože nerozpoznává regulární výrazy ani žádné metaznaky. Pro vyhledávání libovolného přímého řetězce by měla být vybrána tato verze grep.

Fgrep hledá celý řetězec a nerozpoznává ani speciální znaky jako součást regulárního výrazu, i když je zakódován nebo ne.

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

Jako když meta-znaky nebyly escapovány, fgrep hledal celý řetězec “(f|g)ile “ v souboru, a když byly meta-znaky escapovány, pak příkaz fgrep hledal “\(f\|g\)ile ” všechny znaky jako v souboru.

Již jsme probrali několik praktických příkladů příkazu grep, můžete si je přečíst zde, pokud chcete z příkazu grep v Linuxu získat více.

Naučte se 12 praktických příkladů Linux grep Command

Závěr

Výše jsou zvýrazněny rozdíly mezi ‘grep‘, ‘egrep‘ a ‘fgrep‘. Kromě rozdílu v sadě použitých regulárních výrazů a rychlosti provádění zůstávají parametry příkazového řádku zbytku stejné pro všechny tři verze grep a dokonce i místo „egrep“ nebo „fgrep“, „grep -E“ nebo „grep - F ” se doporučuje používat.

Pokud najdete nějaké další rozdíly mezi těmito třemi verzemi grep, zmiňte je ve svých komentářích.