it-swarm.com.de

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

Ich möchte die Unterschiede zwischen grep, pgrep, egrep und fgrep erklären und wie ich sie verwenden würde.

55
Eric Leschinski

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 Standardbefehl grep 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 gemeinsamen Flags sind: -c für die Anzahl der erfolgreichen Übereinstimmungen zu zählen und nicht die tatsächlichen Begegnungen drucken, -i die Suche Groß- und Kleinschreibung zu machen, -n die Zeilennummer vor jedem Spiel Ausdruck zu drucken, -v das Komplement des regulären Ausdrucks zu nehmen (dh geben Sie die Zeilen zurück, die nicht übereinstimmen) und -l, um 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 (das mit grep -E identisch ist) behandelt +, ?, |, ( und ) als Metazeichen.

In einfachen regulären Ausdrücken (mit grep) verlieren die Metazeichen ?, +, {, |, ( und ) ihre spezielle Bedeutung. Wenn Sie möchten, dass grep diese Zeichen als Metazeichen behandelt, schließen Sie sie mit \?, \+, \{, \|, \( 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 der + von egrep als Metazeichen behandelt wurde. normal grep hätte nur nach Zeilen mit einem wörtlichen + 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 mit regulären Ausdrücken als speziell. Die Suche wird schneller abgeschlossen, da nur eine einfache Zeichenfolge und kein komplexes Muster verarbeitet wird.

Wenn ich zum Beispiel 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, ein einzelnes Zeichen" bedeutet:

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 pgrep mysql verwenden, der eine Prozess-ID wie 7312 zurückgibt.

84
Eric Leschinski