Website-Suche

Was ist der Unterschied zwischen grep, egrep und fgrep unter Linux?


Eines der bekanntesten Suchwerkzeuge auf Unix-ähnlichen Systemen, das verwendet werden kann, um nach allem zu suchen, sei es eine Datei, eine Zeile oder mehrere Zeilen in einer Datei, ist das grep-Dienstprogramm. Es ist sehr umfangreich in der Funktionalität, was auf die große Anzahl von Optionen zurückzuführen ist, die es unterstützt, wie z. B.: Suche mit String-Muster oder Reg-Ex-Muster oder Perl-basiertem Reg-Ex usw.

Aufgrund seiner unterschiedlichen Funktionalitäten gibt es viele Varianten, darunter grep, egrep (Extended GREP), fgrep (Fixed GREP), pgrep (Process GREP), rgrep (Recursive GREP) usw. Diese Varianten weisen jedoch geringfügige Unterschiede zum ursprünglichen grep auf, was sie populär gemacht hat und von verschiedenen Linux-Programmierern für bestimmte Aufgaben verwendet werden kann.

Die Hauptsache, die noch untersucht werden muss, ist, was die Unterschiede zwischen den drei Hauptvarianten 'grep', 'egrep' und 'fgrep' von grep sind, die Linux-Benutzer dazu bringen, die eine oder andere Version je nach Bedarf zu wählen.

Einige spezielle Meta-Zeichen von grep

  1. + – Entspricht einem oder mehreren Vorkommen eines vorherigen Charakters.
  2. ? – Dies bedeutet fast 1 Wiederholung des vorherigen Charakters. Wie: ein? Würde mit 'a' oder 'aa' übereinstimmen.
  3. ( – Beginn des Alternationsausdrucks.
  4. ) – Ende des Ausdrucks der Alternierung.
  5. | – Übereinstimmung mit einem der Ausdrücke, die durch '|' getrennt sind. Zum Beispiel: "(a|b)cde " würde entweder auf 'abcde' oder 'bbcde' passen.
  6. { – Dieses Metazeichen gibt den Beginn des Bereichsbezeichners an. Wie: "a{2} " stimmt mit "aa" in der Datei überein, d.h. a 2 mal.
  7. } – Dieses Metazeichen gibt den Bezeichner für das Ende des Bereichs an.

Unterschiede zwischen grep, egrep und fgrep

Einige Hauptunterschiede zwischen grep, egrep und fgrep können wie folgt hervorgehoben werden. Für diese Reihe von Beispielen gehen wir davon aus, dass die Datei, für die die Operation ausgeführt wird, wie folgt aussieht:

grep-Befehl

grep oder Global Regular Expression Print ist das Hauptsuchprogramm auf Unix-ähnlichen Systemen, das nach jeder Art von Zeichenkette in jeder Datei oder Liste von Dateien oder sogar nach der Ausgabe eines Befehls suchen kann.

Empfohlene Lektüre: 12 praktische Beispiele für den Linux-grep-Befehl

Es verwendet grundlegende reguläre Ausdrücke neben normalen Zeichenfolgen als Suchmuster. In Basic Regular Expressions (BRE) verlieren Meta-Zeichen wie: '{','}','(',')','|','+','?' ihre Bedeutung und werden als normale Zeichen einer Zeichenkette behandelt und müssen maskiert werden, wenn sie als Sonderzeichen behandelt werden sollen.

Empfohlene Lektüre: 11 erweiterte 'grep'-Befehle für Zeichenklassen und Klammerausdrücke

Außerdem verwendet grep den Boyer-Moore-Algorithmus für die schnelle Suche nach Zeichenfolgen oder regulären Ausdrücken.

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

Wie hier, wenn der Befehl ausgeführt wird, ohne '(' ')' und '|' zu maskieren, dann sucht er nach dem vollständigen String, d.h. "(f|g)ile" in der Datei. Wenn die Sonderzeichen jedoch maskiert wurden, behandelte grep sie nicht als Teil einer Zeichenfolge, sondern als Metazeichen und suchte nach den Wörtern "Datei" oder "gile" in der Datei.

egrep-Befehl

Egrep oder grep -E ist eine andere Version von grep oder dem Extended grep. Diese Version von grep ist effizient und schnell, wenn es darum geht, nach einem Muster für reguläre Ausdrücke zu suchen, da sie Metazeichen so behandelt, wie sie sind, und sie nicht als Zeichenketten wie in grep ersetzt, und daher sind Sie von der Last befreit, sie wie in grep zu entkommen. Es verwendet ERE oder den Satz "Erweiterter regulärer Ausdruck".

Im Falle von egrep würde es, auch wenn Sie die Metazeichen nicht maskieren, sie als Sonderzeichen behandeln und sie durch ihre spezielle Bedeutung ersetzen, anstatt sie als Teil der Zeichenkette zu behandeln.

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

Wie hier suchte egrep nach "file" -Zeichenfolge, wenn die Meta-Zeichen nicht maskiert wurden, da dies die Bedeutung dieser Zeichen bedeuten würde. Wenn diese Zeichen jedoch maskiert wurden, behandelte egrep sie als Teil des Strings und suchte nach dem vollständigen String "(f|g)ile " in der Datei.

fgrep-Befehl

Fgrep oder das Fixed grep oder grep -F ist eine weitere Version von grep, die schnell sucht, wenn es darum geht, nach dem gesamten String anstelle von regulären Ausdrücken zu suchen, da sie weder die regulären Ausdrücke noch Meta-Zeichen erkennt. Für die Suche nach einer direkten Zeichenkette sollte dies die Version von grep ausgewählt werden.

Fgrep sucht nach vollständigen Zeichenfolgen und erkennt Sonderzeichen nicht einmal als Teil des regulären Ausdrucks, selbst wenn sie mit oder ohne Escapezeichen versehen sind.

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

Wenn Metazeichen nicht maskiert wurden, suchte fgrep nach der vollständigen Zeichenkette "(f|g)ile " in der Datei, und wenn die Metazeichen maskiert wurden, suchte der fgrep-Befehl nach "\(f\|g\)ile" alle Zeichen, so wie sie in der Datei sind.

Wir haben bereits einige praktische Beispiele für grep-Befehle behandelt, die Sie hier lesen können, wenn Sie mehr aus dem grep-Befehl in Linux herausholen möchten.

Lernen Sie 12 praktische Beispiele für den Linux-grep-Befehl kennen

Schlussfolgerung

Oben hervorgehoben sind die Unterschiede zwischen 'grep', 'egrep' und 'fgrep'. Abgesehen von den Unterschieden in der Menge der verwendeten regulären Ausdrücke und der Geschwindigkeit der Ausführung bleiben die REST-Befehlszeilenparameter für alle drei Versionen von grep gleich und es wird sogar empfohlen, anstelle von "egrep" oder "fgrep" " "grep -E " oder "grep -F" zu verwenden.

Wenn Sie weitere Unterschiede zwischen diesen drei Versionen von grep finden, erwähnen Sie diese in Ihren Kommentaren.

Verwandte Artikel: