Auf Unix-ähnlichen Betriebssystemen sucht der egrep-Befehl nach einem Textmuster, wobei er erweiterte reguläre Ausdrücke verwendet, um die Übereinstimmung herzustellen. Das Ausführen von egrep ist gleichbedeutend mit dem Ausführen von grep mit der Option -E.
Diese Seite behandelt die GNU/Linux-Version von egrep.
Syntax
egrep PATTERN
Optionen
-A NUM, –after-context=NUM |
Drucke NUM Zeilen mit nachstehendem Kontext nach den passenden Zeilen. Platziert eine Zeile mit — zwischen zusammenhängenden Gruppen von Übereinstimmungen. |
-a, –text | Verarbeitet eine Binärdatei, als wäre sie Text; dies entspricht der Option –binary-files=text. |
-B NUM, –before-context=NUM |
Drucke NUM Zeilen mit führendem Kontext vor übereinstimmenden Zeilen. Platziert eine Zeile mit — zwischen zusammenhängenden Gruppen von Übereinstimmungen. |
-C NUM, –context=NUM | Drucke NUM Zeilen des Ausgabekontexts. Platziert eine Zeile mit — zwischen zusammenhängenden Gruppen von Übereinstimmungen. |
-b, –byte-offset | Drucke den Byte-Offset in der Eingabedatei vor jeder Ausgabezeile. |
–binary-files=TYPE | Wenn die ersten paar Bytes einer Datei darauf hinweisen, dass die Datei binäre Daten enthält, wird angenommen, dass die Datei vom Typ TYPE ist. Standardmäßig ist TYPE binär, und grep gibt normalerweise entweder eine einzeilige Meldung aus, die besagt, dass eine Binärdatei übereinstimmt, oder keine Meldung, wenn es keine Übereinstimmung gibt. Wenn TYP ohne Übereinstimmung ist, nimmt grep an, dass eine Binärdatei nicht übereinstimmt; dies entspricht der Option -I. Wenn TYP text ist, verarbeitet grep eine Binärdatei, als ob sie Text wäre; dies entspricht der Option -a. Warnung: grep –binary-files=text kann binären Müll ausgeben, was unangenehme Nebeneffekte haben kann, wenn die Ausgabe ein Terminal ist und der Terminaltreiber einiges davon als Befehle interpretiert. |
–colour, –color |
Umgeben Sie die übereinstimmende Zeichenkette mit der Markierung find in der Umgebungsvariablen GREP_COLOR. WHEN kann ’never‘, ‚always‘ oder ‚auto‘ |
-c, –count | Unterdrücken Sie die normale Ausgabe; geben Sie stattdessen eine Zählung der übereinstimmenden Zeilen für jede Eingabedatei aus. Mit der Option -v, –invert-match (siehe unten), werden nicht übereinstimmende Zeilen gezählt. |
-D ACTION, –devices=ACTION |
Wenn eine Eingabedatei ein Gerät, FIFO oder Socket ist, verwenden Sie ACTION, um sie zu verarbeiten. Standardmäßig steht ACTION auf read, was bedeutet, dass Geräte wie normale Dateien gelesen werden. Wenn ACTION skip ist, werden Geräte stillschweigend übersprungen. |
-d ACTION, –directories=ACTION |
Wenn eine Eingabedatei ein Verzeichnis ist, verwenden Sie ACTION, um es zu verarbeiten. Standardmäßig ist ACTION read, was bedeutet, dass Verzeichnisse wie normale Dateien gelesen werden. Wenn ACTION skip ist, werden Verzeichnisse stillschweigend übersprungen. Wenn ACTION recurse ist, liest grep alle Dateien unter jedem Verzeichnis, rekursiv; dies entspricht der Option -r. |
-e PATTERN, –regexp=PATTERN |
Verwenden Sie PATTERN als Muster; nützlich, um Muster zu schützen, die mit „-“ beginnen. |
-F, –fixed-strings | PATTERN als eine Liste von festen Zeichenketten interpretieren, die durch Zeilenumbrüche getrennt sind und abgeglichen werden können. |
-P, –perl-regexp | Interpretiere PATTERN als einen regulären Ausdruck in Perl. |
-f FILE, –file=FILE | Erhalte Muster aus DATEI, eines pro Zeile. Die leere Datei enthält keine Muster und passt daher auf nichts. |
-G, –basic-regexp | Das Muster als regulären Ausdruck interpretieren (siehe unten). Dies ist die Standardeinstellung. |
-H, –with-filename | Drucke den Dateinamen für jede Übereinstimmung. |
-h, –no-filename | Unterdrückt das Voranstellen von Dateinamen bei der Ausgabe, wenn mehrere Dateien durchsucht werden. |
–help | Gibt eine kurze Hilfemeldung aus. |
-I | Verarbeitet eine Binärdatei so, als ob sie keine übereinstimmenden Daten enthielte; dies entspricht der Option –binary-files=without-match. |
-i, –ignore-case | Unterschiede in der Groß- und Kleinschreibung sowohl im PATTERN als auch in den Eingabedateien ignorieren. |
-L, –files-without-match |
Unterdrücken Sie die normale Ausgabe; geben Sie stattdessen den Namen jeder Eingabedatei aus, von der normalerweise keine Ausgabe erfolgen würde. |
-l, –files-with-matches | Unterdrücken Sie die normale Ausgabe; geben Sie stattdessen den Namen jeder Eingabedatei aus, von der normalerweise eine Ausgabe erfolgen würde. Das Scannen stoppt bei der ersten Übereinstimmung. |
-m NUM, –max-count=NUM |
Stoppt das Lesen einer Datei nach NUM passenden Zeilen. Wenn es sich bei der Eingabe um eine Standardeingabe aus einer regulären Datei handelt und NUM übereinstimmende Zeilen ausgegeben werden, stellt grep sicher, dass die Standardeingabe nach der letzten übereinstimmenden Zeile positioniert wird, bevor es beendet wird, unabhängig vom Vorhandensein von abschließenden Kontextzeilen. Dies ermöglicht es einem aufrufenden Prozess, die Suche fortzusetzen. Wenn grep nach NUM übereinstimmenden Zeilen anhält, gibt es alle nachfolgenden Kontextzeilen aus. Wenn die Option -c oder –count ebenfalls verwendet wird, gibt grep keine Anzahl aus, die größer als NUM ist. Wenn die Option -v oder –invert-match ebenfalls verwendet wird, stoppt grep nach der Ausgabe von NUM nicht übereinstimmenden Zeilen. |
–mmap | Wenn möglich, verwenden Sie den Systemaufruf mmap, um Eingaben zu lesen, anstatt den Standard-Systemaufruf read. In manchen Situationen bietet –mmap eine bessere Leistung. Allerdings kann –mmap zu undefiniertem Verhalten führen (einschließlich Core-Dumps), wenn eine Eingabedatei schrumpft, während grep arbeitet, oder wenn ein E/A-Fehler auftritt. |
-n, –line-number | Präfixieren Sie jede Ausgabezeile mit der Zeilennummer in der zugehörigen Eingabedatei. |
-o, –only-matching | Zeigt nur den Teil einer passenden Zeile an, der mit PATTERN übereinstimmt. |
–label=LABEL | Darstellt Eingaben, die tatsächlich von der Standardeingabe kommen, als Eingaben aus der Datei LABEL. Dies ist besonders nützlich für Werkzeuge wie zgrep, z.B. gzip -cd foo.gz |grep -H –label=foo etwas |
–line-buffered | Zeilenpufferung verwenden. Dies kann zu Leistungseinbußen führen. |
-q, –quiet, –silent | Sei ruhig; schreibe nichts auf die Standardausgabe. Beendet sich sofort mit Status Null, wenn eine Übereinstimmung gefunden wird, auch wenn ein Fehler entdeckt wurde. Siehe auch die Option -s oder –no-messages. |
-R, -r, –recursive | Lese alle Dateien unter jedem Verzeichnis, rekursiv; dies entspricht der Option -d recurse. Geändert durch: –include=PATTERN Rezirkulieren in Verzeichnissen, indem nur Dateien gesucht werden, die mit PATTERN übereinstimmen. –exclude=PATTERN Rezirkulieren in Verzeichnissen, indem Dateien übersprungen werden, die mit PATTERN übereinstimmen. |
-s, –no-messages | Fehlermeldungen über nicht existierende oder nicht lesbare Dateien unterdrücken. Hinweis zur Portabilität: Im Gegensatz zu GNU grep war das traditionelle grep nicht konform mit POSIX.2, da das traditionelle grep keine Option -q hatte und seine Option -s sich wie die Option -q von GNU grep verhielt. Shell-Skripte, die auf das traditionelle grep portabel sein sollen, sollten sowohl -q als auch -s vermeiden und stattdessen die Ausgabe nach /dev/null umleiten. |
-U, –binary | Die Datei(en) als Binärdatei behandeln. Unter MS-DOS und Microsoft Windows errät grep standardmäßig den Dateityp anhand des Inhalts der ersten 32 KB, die aus der Datei gelesen werden. Wenn grep entscheidet, dass es sich um eine Textdatei handelt, entfernt es die CR-Zeichen aus dem ursprünglichen Dateiinhalt (damit reguläre Ausdrücke mit ^ und $ korrekt funktionieren). Die Angabe von -U setzt diese Vermutung außer Kraft und bewirkt, dass alle Dateien gelesen und wortwörtlich an den Abgleichmechanismus übergeben werden; wenn die Datei eine Textdatei mit CR/LF-Paaren am Ende jeder Zeile ist, führt dies dazu, dass einige reguläre Ausdrücke fehlschlagen. Diese Option hat keine Auswirkungen auf andere Plattformen als MS-DOS und MS-Windows. |
-u, –unix-byte-offsets | Byte-Offsets im Unix-Stil melden. Dieser Schalter veranlasst grep, Byte-Offsets zu melden, als wäre die Datei eine Textdatei im Unix-Stil, d.h. ohne CR-Zeichen. Dies führt zu den gleichen Ergebnissen wie die Ausführung von grep auf einem Unix-Rechner. Diese Option hat keine Auswirkung, wenn nicht auch die Option -b verwendet wird; sie hat keine Auswirkung auf anderen Plattformen als MS-DOS und MS-Windows. |
-V, –version | Drucke die Versionsnummer von grep in den Standardfehler. Diese Versionsnummer sollte in allen Fehlerberichten angegeben werden (siehe unten). |
-v, –invert-match | Den Sinn der Übereinstimmung umkehren, um nicht übereinstimmende Zeilen auszuwählen. |
-w, –word-regexp | Nur die Zeilen auswählen, die Übereinstimmungen enthalten, die ganze Wörter bilden. Der Test besteht darin, dass die übereinstimmende Teilzeichenkette entweder am Anfang der Zeile stehen oder ein Zeichen vorangestellt sein muss, das nicht zu einem Wort gehört. Ebenso muss sie entweder am Ende der Zeile stehen oder von einem Nicht-Wortbestandteil-Zeichen gefolgt sein. Wortkonstituierende Zeichen sind Buchstaben, Ziffern und der Unterstrich. |
-x, –line-regexp | Wählen Sie nur die Übereinstimmungen aus, die genau mit der gesamten Zeile übereinstimmen. |
-y | Veraltetes Synonym für -i. |
-Z, –null | Ein Null-Byte (das ASCII-NULL-Zeichen) anstelle des Zeichens ausgeben, das normalerweise einem Dateinamen folgt. Zum Beispiel gibt grep -lZ nach jedem Dateinamen ein Null-Byte anstelle des üblichen Zeilenumbruchs aus. Diese Option sorgt für eine eindeutige Ausgabe, selbst bei Dateinamen, die ungewöhnliche Zeichen wie Zeilenumbrüche enthalten. Diese Option kann mit Befehlen wie find -print0, perl -0, sort -z und xargs -0 verwendet werden, um beliebige Dateinamen zu verarbeiten, auch solche, die Zeilenumbrüche enthalten. |
Reguläre Ausdrücke
Ein regulärer Ausdruck ist ein Muster, das eine Menge von Zeichenfolgen beschreibt. Reguläre Ausdrücke werden analog zu arithmetischen Ausdrücken aufgebaut, wobei verschiedene Operatoren verwendet werden, um kleinere Ausdrücke zu kombinieren.
Grep versteht zwei verschiedene Versionen der Syntax regulärer Ausdrücke: „basic“ und „extended“. In GNU grep gibt es keinen Unterschied in der verfügbaren Funktionalität bei Verwendung beider Syntaxen. In anderen Implementierungen sind die einfachen regulären Ausdrücke weniger mächtig. Die folgende Beschreibung bezieht sich auf die erweiterten regulären Ausdrücke, die in egrep verwendet werden; die Unterschiede zu den einfachen regulären Ausdrücken werden anschließend zusammengefasst.
Die grundlegenden Bausteine sind die regulären Ausdrücke, die auf ein einzelnes Zeichen passen. Die meisten Zeichen, einschließlich aller Buchstaben und Ziffern, sind reguläre Ausdrücke, die auf sich selbst passen. Jedes Metazeichen mit besonderer Bedeutung kann in Anführungszeichen gesetzt werden, indem ihm ein Backslash vorangestellt wird.
Ein Klammerausdruck ist eine Liste von Zeichen, die von . Er passt auf jedes einzelne Zeichen in dieser Liste; wenn das erste Zeichen der Liste das Caret ^ ist, passt er auf jedes Zeichen, das nicht in der Liste steht. Zum Beispiel passt der reguläre Ausdruck auf jede einzelne Ziffer.
Innerhalb eines Klammerausdrucks besteht ein Bereichsausdruck aus zwei durch einen Bindestrich („-„) getrennten Zeichen. Er stimmt mit jedem einzelnen Zeichen überein, das sich zwischen den beiden Zeichen befindet, einschließlich der Sortierreihenfolge und des Zeichensatzes des Gebietsschemas. In der Standard-Locale C entspricht es beispielsweise . Viele Gebietsschemata sortieren die Zeichen in Wörterbuchreihenfolge, und in diesen Gebietsschemata ist oft nicht äquivalent zu ; es könnte zum Beispiel äquivalent zu , sein. Um die traditionelle Interpretation von Klammerausdrücken zu erhalten, können Sie das Gebietsschema C verwenden, indem Sie die Umgebungsvariable LC_ALL auf den Wert C setzen.
Schließlich sind bestimmte benannte Zeichenklassen in Klammerausdrücken vordefiniert, wie folgt. Ihre Namen sind selbsterklärend und lauten , , , , , , , , , , , , und . Zum Beispiel bedeutet ] , mit der Ausnahme, dass die letztere Form vom C-Locale und der ASCII-Zeichenkodierung abhängt, während die erstere unabhängig vom Locale und Zeichensatz ist. (Beachten Sie, dass die Klammern in diesen Klassennamen Teil der symbolischen Namen sind und zusätzlich zu den Klammern, die die Klammerliste begrenzen, gesetzt werden müssen). Die meisten Metazeichen verlieren innerhalb von Listen ihre besondere Bedeutung. Um ein literales ] einzufügen, setzen Sie es an die erste Stelle der Liste. Um ein ^-Literal einzufügen, setzen Sie es an eine beliebige Stelle, jedoch nicht an die erste. Um ein Literal – einzuschließen, setzen Sie es an den letzten Platz.
Der Punkt . passt zu jedem einzelnen Zeichen. Das Symbol \w ist ein Synonym für ] und \W ist ein Synonym für ].
Das Caret ^ und das Dollarzeichen („$“) sind Metazeichen, die auf die leere Zeichenfolge am Anfang bzw. Ende einer Zeile passen. Die Symbole \< und \> entsprechen der leeren Zeichenfolge am Anfang bzw. am Ende eines Wortes. Das Symbol \b stimmt mit der leeren Zeichenkette am Rand eines Wortes überein, und \B stimmt mit der leeren Zeichenkette überein, sofern sie nicht am Rand eines Wortes steht.
Ein regulärer Ausdruck kann von einem von mehreren Wiederholungsoperatoren gefolgt werden:
? | Das vorangehende Element ist optional und wird höchstens einmal erfüllt. |
* | Das vorangehende Element wird null oder mehr Mal erfüllt. |
+ | Das vorangehende Element wird ein oder mehrere Male erfüllt. |
{n} | Das vorhergehende Element wird genau n-mal getroffen. |
{n,} | Das vorhergehende Element wird n-mal oder öfter getroffen. |
{n,m} | Das vorangehende Element entspricht mindestens n-mal, aber höchstens m-mal. |
Zwei reguläre Ausdrücke können verkettet werden; der resultierende reguläre Ausdruck entspricht einer beliebigen Zeichenkette, die durch Verkettung zweier Teilzeichenfolgen gebildet wird, die jeweils mit den verketteten Teilausdrücken übereinstimmen.
Zwei reguläre Ausdrücke können durch den Infix-Operator | verbunden werden; der resultierende reguläre Ausdruck passt auf jede Zeichenkette, die mit einem der beiden Unterausdrücke übereinstimmt.
Wiederholung hat Vorrang vor Verkettung, die wiederum Vorrang vor Alternation hat. Ein ganzer Unterausdruck kann in Klammern eingeschlossen werden, um diese Vorrangregeln außer Kraft zu setzen.
Die Rückreferenz \n, wobei n eine einzelne Ziffer ist, passt auf die Teilzeichenkette, die zuvor auf den n-ten eingeklammerten Unterausdruck des regulären Ausdrucks passte.
In einfachen regulären Ausdrücken verlieren die Metazeichen ?, +, {, |, (, und ) ihre besondere Bedeutung; stattdessen werden die Versionen mit umgekehrtem Schrägstrich \?, \+, \{, \|, \(, und \).
Traditionelles egrep unterstützte das {-Metazeichen nicht, und einige egrep-Implementierungen unterstützen stattdessen \{, so dass portable Skripte { in egrep-Mustern vermeiden und verwenden sollten, um mit einem literalen { übereinzustimmen.
GNU egrep versucht, die traditionelle Verwendung zu unterstützen, indem es annimmt, dass { nicht speziell ist, wenn es der Beginn einer ungültigen Intervall-Spezifikation wäre. Zum Beispiel sucht der Shell-Befehl egrep ‚{1′ nach der zweistelligen Zeichenfolge {1‘, anstatt einen Syntaxfehler im regulären Ausdruck zu melden. POSIX.2 erlaubt dieses Verhalten als Erweiterung, aber portable Skripte sollten es vermeiden.
Umgebungsvariablen
Das Verhalten von Grep wird durch die folgenden Umgebungsvariablen beeinflusst:
Ein Gebietsschema LC_foo wird durch die Untersuchung der drei Umgebungsvariablen LC_ALL, LC_foo, LANG, in dieser Reihenfolge, festgelegt. Die erste dieser Variablen, die gesetzt wird, legt das Gebietsschema fest. Wenn zum Beispiel LC_ALL nicht gesetzt ist, aber LC_MESSAGES auf pt_BR gesetzt ist, dann wird brasilianisches Portugiesisch als LC_MESSAGES-Sprachumgebung verwendet. Die C-Locale wird verwendet, wenn keine dieser Umgebungsvariablen gesetzt ist, oder wenn der Locale-Katalog nicht installiert ist, oder wenn grep nicht mit nationaler Sprachunterstützung (NLS) kompiliert wurde.
GREP_OPTIONS
Diese Variable gibt Standardoptionen an, die vor alle expliziten Optionen gestellt werden. Wenn GREP_OPTIONS zum Beispiel ‚–binary-files=without-match –directories=skip‘ ist, verhält sich grep so, als ob die beiden Optionen –binary-files=without-match und –directories=skip vor allen expliziten Optionen angegeben worden wären. Optionsangaben werden durch Leerzeichen getrennt. Ein Backslash umgeht das nächste Zeichen, so dass er verwendet werden kann, um eine Option anzugeben, die Leerzeichen oder einen Backslash enthält.
GREP_COLOR
Spezifiziert die Markierung für die Hervorhebung.
LC_ALL, LC_COLLATE, LANG
Diese Variablen spezifizieren das LC_COLLATE Gebietsschema, das die Kollationierungssequenz bestimmt, die verwendet wird, um Bereichsausdrücke wie .
LC_ALL, LC_CTYPE, LANG
Diese Variablen spezifizieren das LC_CTYPE Gebietsschema, das den Typ der Zeichen bestimmt, z.B.,
LC_ALL, LC_MESSAGES, LANG
Diese Variablen geben das Gebietsschema LC_MESSAGES an, das die Sprache bestimmt, die grep für Meldungen verwendet. Die Standard-Locale C verwendet amerikanisches Englisch für Meldungen.
POSIXLY_CORRECT
Wenn gesetzt, verhält sich grep so, wie es POSIX.2 verlangt; andernfalls verhält sich grep eher wie andere GNU-Programme. POSIX.2 verlangt, dass Optionen, die auf Dateinamen folgen, wie Dateinamen behandelt werden müssen; standardmäßig werden solche Optionen an den Anfang der Operandenliste gesetzt und als Optionen behandelt. Außerdem verlangt POSIX.2, dass nicht erkannte Optionen als „illegal“ diagnostiziert werden, aber da sie nicht wirklich gegen das Gesetz verstoßen, ist die Voreinstellung, sie als „ungültig“ zu diagnostizieren. POSIXLY_CORRECT deaktiviert auch _N_GNU_nonoption_argv_flags_, wie unten beschrieben.
_N_GNU_nonoption_argv_flags_
(Hier ist N die numerische Prozess-ID von grep.) Wenn das i-te Zeichen des Wertes dieser Umgebungsvariablen 1 ist, wird der i-te Operand von grep nicht als Option betrachtet, selbst wenn er als solche erscheint. Eine Shell kann diese Variable für jeden Befehl, den sie ausführt, in die Umgebung setzen, um anzugeben, welche Operanden das Ergebnis einer Platzhalterexpansion für Dateinamen sind und daher nicht als Optionen behandelt werden sollen. Dieses Verhalten ist nur mit der GNU C-Bibliothek verfügbar und nur, wenn POSIXLY_CORRECT nicht gesetzt ist.
Beispiele
egrep "support|help|windows" myfile.txt
Suche nach Mustern von Hilfestellungen und Fenstern in der Datei myfile.txt.
egrep '^+$' myfile.txt
Gleiche alle Zeilen in myfile.txt ab, die eine Zeile mit einem alphabetischen Wort beginnen, das auch die Zeile beendet.
egrep -c '^begin|end$' myfile.txt
Zähle die Anzahl der Zeilen in myfile.txt, die mit dem Wort „begin“ beginnen oder mit dem Wort „end“ enden.
fgrep – Filtert Text, der mit einer Zeichenkette mit festen Zeichen übereinstimmt.
grep – Filtert Text, der mit einem regulären Ausdruck übereinstimmt.
sed – Ein Dienstprogramm zum Filtern und Umwandeln von Text.
sh – Der Bourne-Shell-Befehlsinterpreter.