Wat ass den Ënnerscheed tëscht Grep, Egrep a Fgrep a Linux?


Ee vun de renomméierten Sichinstrument op Unix-ähnleche Systemer, déi benotzt kënne fir alles ze sichen, ob et eng Datei ass, oder eng Zeil oder méi Zeilen an der Datei ass grep Utility. Et ass ganz grouss a Funktionalitéit, déi zu der grousser Unzuel vun Optiounen zougeschriwwe ka ginn, déi et ënnerstëtzt wéi: Sich mat Stringmuster, oder Reg-ex Muster oder Perl baséiert Reg-Ex etc.

Wéinst senge variéierende Funktionalitéiten huet et vill Varianten dorënner grep, egrep (verlängert GREP), fgrep (fix GREP), pgrep (Prozess GREP), rgrep (rekursiv GREP) etc. populär a fir vu verschiddene Linux Programméierer fir spezifesch Aufgaben benotzt ze ginn.

D'Haaptsaach, déi ënnersicht bleift, ass wat d'Ënnerscheeder tëscht den dräi Haaptvarianten sinn, dh 'grep', 'egrep' an 'fgrep' vu grep, déi Linux Benotzer déi eng oder déi aner Versioun no Ufuerderung wielen.

E puer speziell Meta-Charaktere vu grep

  1. + – Äquivalent zu engem oder méi Optriede vum fréiere Charakter.
  2. ? - Dëst bezeechent bal 1 Widderhuelung vum fréiere Charakter. Wéi: a? Géif mat 'a' oder 'aa' passen.
  3. ( – Ufank vum Alternatiounsausdrock.
  4. ) – Enn vum Ofwiesselungsausdrock.
  5. | - Passt entweder vum Ausdrock getrennt duerch |. Wéi: \(a|b)cde géif entweder 'abcde' oder 'bbcde' passen.
  6. { - Dëse Meta-Charakter weist den Ufank vum Range Spezifizéierer un. Wéi: \a{2} entsprécht \aa am Fichier dh 2 Mol.
  7. } - Dëse Meta-Charakter weist d'Enn vum Range Spezifizéierer un.

Ënnerscheeder tëscht grep, egrep a fgrep

E puer Haaptdifferenzen tëscht grep, egrep a fgrep kënne wéi follegt beliicht ginn. Fir dës Set vu Beispiller huelen mir un datt d'Datei op där d'Operatioun ausgefouert gëtt:

grep oder Global Regular Expression Print ass den Haapt Sichprogramm op Unix-ähnleche Systemer, déi no all Typ vu String op all Datei oder Lëscht vu Dateien oder souguer Ausgang vun all Kommando sichen.

Et benotzt Basis Regular Expressiounen ausser normale Saiten als Sichmuster. An Basic Regular Expressions (BRE), Meta-Charaktere wéi: {,},(,),|,+,? verléieren hir Bedeitung a ginn als normal Zeeche vum String behandelt a musse entkommen wann se als speziell Zeechen behandelt ginn.

Och grep benotzt Boyer-Moore Algorithmus fir séier all String oder reegelméissegen Ausdrock ze sichen.

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

Wéi hei, wann de Kommando ausgeführt gëtt ouni ( ) an | ze entkommen, da gouf no der kompletter String gesicht, dh \(f|g)ile an der Datei. Awer wann d'Spezialzeechen entkomm sinn, anstatt se als Deel vun enger String ze behandelen, huet de grep se als Meta-Charaktere behandelt a no Wierder \Fichier oder gesicht. \gile an der Datei.

Egrep oder grep -E ass eng aner Versioun vu grep oder den erweiderten grep. Dës Versioun vu Grep ass effizient a séier wann et drëm geet no engem reguläre Ausdrockmuster ze sichen well et Meta-Charaktere behandelt wéi et ass an se net als Strings ersetzt wéi am Grep, an dofir sidd Dir befreit vun der Belaaschtung fir se ze entkommen als an grep. Et benotzt ERE oder den Extended Regular Expression Set.

Am Fall vun egrep, och wann Dir d'Meta-Charaktere net entkommt, géif et se als speziell Charaktere behandelen an se duerch hir speziell Bedeitung ersetzen anstatt se als Deel vum String ze behandelen.

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

Wéi hei huet egrep no \Fichier String gesicht wann d'Meta-Charaktere net entkomm sinn, wéi et duerch d'Bedeitung vun dëse Charaktere bedeit. Deel vun der String a gesicht no komplette String \(f|g)ile an der Datei.

Fgrep oder de Fixed grep oder grep -F ass nach eng aner Versioun vu grep déi séier ass an der Sich wann et drëm geet fir de ganze String ze sichen amplaz vum regulären Ausdrock well et déi regulär Ausdréck net erkennt, weder keng Meta-Charaktere. Fir all direkt String ze sichen, ass dëst d'Versioun vu grep déi ausgewielt soll ginn.

Fgrep sicht no komplette String an erkennt net emol speziell Zeechen als Deel vum reguläre Ausdrock, och wa se entkommen oder net entkomm sinn.

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

Wéi, wann d'Meta-Charaktere net entkomm sinn, huet fgrep de komplette String \(f|g)ile an der Datei gesicht, a wann d'Meta-Charaktere entkomm sinn, dann huet de fgrep Kommando gesicht. fir \\(f\|g\)ile all Zeechen wéi an der Datei.

Mir hunn schonn e puer praktesch Beispiller vu grep Kommando iwwerdeckt, Dir kënnt se hei liesen, wann Dir méi aus dem grep Kommando am Linux wëllt kréien.

Conclusioun

Uewen beliicht sinn d'Ënnerscheeder tëscht 'grep', 'egrep' an 'fgrep'. Ofgesi vun der Differenz am Set vu reegelméissegen Ausdréck, a Geschwindegkeet vun der Ausféierung, bleiwen d'Rescht Kommandozeilparameter d'selwecht fir all déi dräi Versioune vu grep an och amplaz \egrep oder \fgrep, \grep -E oder \grep -F sinn recommandéiert ze benotzen.

Wann Dir aner Differenzen tëscht dësen dräi Versioune vu grep fannt, ernimmt se an Äre Kommentaren.