Was ist der Unterschied zwischen grep, pgrep, egrep, fgrep?


Antworten:


85

Unterschiede zwischen grep, pgrep, egrep und fgrep (Linux):

grep

grep ist eine Abkürzung für "Global Regular Expressions Print". grep ist ein Programm, das eine bestimmte Datei oder Dateien zeilenweise durchsucht und dabei Zeilen zurückgibt, die ein Muster enthalten. Ein Muster ist ein Ausdruck, der eine Reihe von Zeichenfolgen angibt, indem Zeichen als Metazeichen interpretiert werden. Beispielsweise wird das Sternchen-Metazeichen (*) so interpretiert, dass es "null oder mehr des vorhergehenden Elements" bedeutet. Auf diese Weise können Benutzer eine kurze Reihe von Zeichen und Metazeichen in einen grep-Befehl eingeben, damit der Computer anzeigt, welche Zeilen in welchen Dateien übereinstimmen.

Der Standard-Grep-Befehl sieht folgendermaßen aus:

grep <flags> '<regular expression>' <filename>

grep druckt die Suchergebnisse auf dem Bildschirm (stdout) und gibt die folgenden Exit-Werte zurück:

0    A match was found.
1    No match was found.
>1   A syntax error was found or a file was inaccessible 
     (even if matches were found).

Einige gebräuchliche Flags sind: -cum die Anzahl der erfolgreichen Übereinstimmungen zu zählen und die tatsächlichen Übereinstimmungen nicht auszudrucken , -ium die Suche auf Groß- und Kleinschreibung zu beschränken, -num die Zeilennummer vor jedem Übereinstimmungsausdruck zu drucken, -vum das Komplement des regulären Ausdrucks zu erhalten (dh um die Zeilen zurückzugeben, die nicht übereinstimmen) und -lum die Dateinamen von Dateien mit Zeilen zu drucken, die mit dem Ausdruck übereinstimmen.

egrep

egrep ist eine Abkürzung für "Extended Global Regular Expressions Print".

Das 'E' in egrep bedeutet, dass das Muster als regulärer Ausdruck behandelt wird. "Extended Regular Expressions", abgekürzt 'ERE', ist in egrep aktiviert. egrep (die dieselbe wie grep -Ebehandelt) +, ?, |, (, und , )wie meta-Zeichen.

In einfachen regulären Ausdrücken (mit grep), die Meta-Zeichen ?, +, {, |, (, und )verlieren ihre besondere Bedeutung. Wenn Sie möchten , grep diese Zeichen als Meta-Zeichen zu behandeln, entkommen sie \?, \+, \{, \|, \(, und \).

In diesem Beispiel verwendet grep reguläre Grundausdrücke, bei denen das Pluszeichen wörtlich behandelt wird und jede Zeile mit einem Pluszeichen zurückgegeben wird.

grep "+" myfile.txt

egrep hingegen behandelt das "+" als Metazeichen und gibt jede Zeile zurück, da plus als "einmal oder mehrmals" interpretiert wird.

egrep "+" myfile.txt

Hier wird jede Zeile zurückgegeben, da +egrep als Metazeichen behandelt wurde. normal grep hätte nur nach Zeilen mit einem Literal gesucht +.

fgrep

fgrep ist eine Abkürzung für "Fixed-String Global Regular Expressions Print".

fgrep (das ist das Gleiche wie grep -F) ist fest oder schnell grep und verhält sich wie grep, erkennt jedoch keine Metazeichen für reguläre Ausdrücke als etwas Besonderes. Die Suche wird schneller abgeschlossen, da nur eine einfache Zeichenfolge und kein komplexes Muster verarbeitet wird.

Wenn ich beispielsweise in meinem .bash_profile nach einem wörtlichen Punkt (.) Suchen wollte, wäre die Verwendung von grep schwierig, da ich den Punkt maskieren müsste, da dot ein Metazeichen ist, das "Platzhalter" bedeutet, also ein einzelnes Zeichen:

grep "." myfile.txt

Der obige Befehl gibt jede Zeile von myfile.txt zurück. Tun Sie dies stattdessen:

fgrep "." myfile.txt

Dann nur die Zeilen, die ein wörtliches '.' in ihnen werden zurückgegeben. fgrep hilft uns dabei, unseren Metazeichen nicht zu entkommen.

pgrep

pgrep ist eine Abkürzung für "Process-ID Global Regular Expressions Print".

pgrep durchsucht die aktuell ausgeführten Prozesse und listet die Prozess-IDs auf, die den Auswahlkriterien für stdout entsprechen. pgrep ist praktisch, wenn Sie nur die Prozess-ID-Ganzzahl eines Prozesses kennen möchten. Wenn ich zum Beispiel nur die Prozess-ID meines mysql-Prozesses wissen wollte, würde ich den Befehl verwenden, pgrep mysqlder eine Prozess-ID wie 7312 zurückgibt.


Von pgrepHand : Der Prozessname für den Abgleich ist auf die 15 Zeichen begrenzt, die in der Ausgabe von / proc / pid / stat enthalten sind . Verwenden Sie die Option -f, um eine Übereinstimmung mit der vollständigen Befehlszeile / proc / pid / cmdline zu erzielen .
Pablo A
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.