Ich möchte einen Spaziergang durch die Unterschiede zwischen grep
, pgrep
, egrep
und fgrep
und , wie ich sie verwenden.
Ich möchte einen Spaziergang durch die Unterschiede zwischen grep
, pgrep
, egrep
und fgrep
und , wie ich sie verwenden.
Antworten:
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: -c
um die Anzahl der erfolgreichen Übereinstimmungen zu zählen und die tatsächlichen Übereinstimmungen nicht auszudrucken , -i
um die Suche auf Groß- und Kleinschreibung zu beschränken, -n
um die Zeilennummer vor jedem Übereinstimmungsausdruck zu drucken, -v
um das Komplement des regulären Ausdrucks zu erhalten (dh um die Zeilen zurückzugeben, die nicht übereinstimmen) und -l
um die Dateinamen von Dateien mit Zeilen zu drucken, die mit dem Ausdruck übereinstimmen.
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 -E
behandelt) +
, ?
, |
, (
, 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 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 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 mysql
der eine Prozess-ID wie 7312 zurückgibt.