GREP(1)

BEZEICHNUNG
grep - Zeilen ausgeben, die zu Suchmustern passen

ÜBERSICHT
grep [OPTION…] MUSTER [DATEI…]
grep [OPTION…] -e MUSTER … [DATEI…]
grep [OPTION…] -f MUSTERDATEI … [DATEI…]

BESCHREIBUNG
grep sucht in jeder DATEI nach MUSTERN. MUSTER ist ein oder mehrere Muster, die durch Zeilenumbrüche getrennt sind und grep gibt jede Zeile aus, die auf ein Muster passt. Typischerweise sollten MUSTER in Anführungszeichen gesetzt werden, wenn grep in einem Shell-Befehl verwendet wird.

Ist DATEI »-« bedeutet dies Standardeingabe. Falls keine DATEI angegeben ist, werden rekursive Suchen das aktuelle Verzeichnis prüfen und nichtrekursive Suchen die Standardeingabe lesen.

OPTIONEN

  Allgemeine Programminformationen

--help
    zeigt Informationen zur Benutzung an und beendet das Programm.

-V, --version
    gibt die Versionsnummer von grep und beendet das Programm.

  Muster-Syntax

-E, --extended-regexp
    MUSTER als erweiterte reguläre Ausdrücke (extended regular expressions, EREs, siehe unten) interpretieren.

-F, --fixed-strings
    MUSTER soll als feste Zeichenkette und nicht als regulärer Ausdruck interpretiert werden.

-G, --basic-regexp
    MUSTER als gewöhnliche reguläre Ausdrücke (basic regular expressions, BREs, siehe unten) interpretieren. Das ist die Voreinstellung.

-P, --perl-regexp
    Interpretiert MUSTER als regulären Perl-kompatiblen Ausdruck (PCRE). Diese Option ist experimentell, wenn sie mit der Option -z (--null-data) kombiniert wird. Es kann vorkommen, dass grep -P wegen nicht implementierter Funktionalitäten warnt.

  Steuerung des Abgleichs

-e MUSTER, --regexp=MUSTER
    MUSTER als die Suchmuster verwenden. Falls diese Option mehrfach verwandt oder mit der Option -f (--file) kombiniert wird, wird nach allen übergebenen Mustern gesucht. Diese Option kann zum Schützen von Mustern, die mit einem »-« anfangen, verwandt werden.

-f DATEI, --file=DATEI
    Liest die Suchmuster Zeile für Zeile aus DATEI ein. Falls diese Option mehrfach verwandt oder mit der Option -e (--regexp) kombiniert wird, wird nach allen übergebenen Mustern gesucht. Eine leere Datei enthält keine Suchmuster und erzielt deshalb auch keine Treffer.

-i, --ignore-case
    Ignoriert Unterscheidungen der Groß-/Kleinschreibung in Mustern und Eingabedaten, so dass Zeichen, die sich nur darin unterscheiden, jeweils auf ihr Gegenstück passen.

--no-ignore-case
    Ignoriert Unterscheidungen der Groß-/Kleinschreibung in Mustern und Eingabedaten nicht. Dies ist die Vorgabe. Diese Option ist in Shell-Skripten nützlich, die bereits die Option -i verwenden. Die beiden Optionen setzen sich gegenseitig außer Kraft, daher können Sie auf diese Weise die Wirkung von -i außer Kraft setzen.

-v, --invert-match
    Invertiert das Suchmuster, so dass alle Zeilen ausgewählt werden, die nicht auf MUSTER passen.

-w, --word-regexp
    Wählt nur solche Zeilen aus, deren Treffer aus vollständigen Wörtern bestehen. Im Einzelnen verläuft der Test so, dass eine passende Zeichenkette entweder am Zeilenanfang beginnen muss oder auf ein Zeichen folgt, das nicht zu den Wortaufbau-Zeichen gehört. Ebenso muss das Ende der Zeichenkette entweder mit dem Zeilenende zusammenfallen oder es darf kein Wortaufbau-Zeichen folgen. Wortaufbau-Zeichen sind alle Buchstaben, Ziffern sowie der Unterstrich. Diese Option hat keinen Effekt, falls auch -x angegeben ist.

-x, --line-regexp
    Wählt nur solche Zeilen aus, deren Treffer die komplette Zeile umfasst. Für ein Muster eines regulären Ausdrucks ist dies identisch zum Setzen des Musters in Anführungszeichen und dann Einfassen mit ^ und $.

  Allgemeine Ausgabesteuerung

-c, --count
    Statt die passenden Zeilen direkt anzuzeigen, wird lediglich ihre Anzahl pro Eingabedatei ausgegeben. Ist zusätzlich die Option -v, --invert-match (siehe oben) angegeben, zählt grep die Zeilen ohne Treffer.

--color[=WANN], --colour[=WANN]
    Schließt die gefundenen (nicht leeren) Zeichenketten, passenden Zeilen, Kontextzeilen, Dateinamen, Zeilennummern, Byte-Offsets und Separatoren (für Felder und Gruppen von Kontextzeilen) mit Escape-Sequenzen ein, damit diese auf dem Terminal farbig angezeigt werden. Die Farben werden durch die Umgebungsvariable GREP_COLORS definiert. WANN kann die Werte never, always oder auto annehmen.

-L, --files-without-match
    Statt der normalen Ausgabe wird der Name jeder Datei ohne Treffer angezeigt.

-l, --files-with-matches
    Statt der normalen Ausgabe wird der Name jeder Datei mit Treffer angezeigt. Die Suche in jeder Eingabedatei endet beim ersten Treffer.

-m ZAHL, --max-count=ZAHL
    Beendet das Lesen einer Datei, nachdem ZAHL passende Zeilen gefunden wurden. Falls die ZAHL Null ist, stoppt grep unmittelbar, ohne die Eingabe zu lesen. Falls die ZAHL -1 ist, wir dies als unendlich aufgefasst und grep stoppt nicht; dies ist die Vorgabe. Wenn die Eingabe aus einer regulären Datei stammt und ZAHL passende Zeilen ausgegeben wurden, positioniert grep, bevor es endet, die Standardeingabe ungeachtet der Existenz folgender Kontextzeilen direkt hinter der letzten passenden Zeile. Dies ermöglicht einem aufrufenden Prozess die Fortsetzung der Suche. Wenn grep nach ZAHL passenden Zeilen endet, gibt es alle nachfolgenden Kontextzeilen aus. Wenn außerdem die Option -c (oder --count) verwendet wird, gibt grep als Ergebnis keine Zahl aus, die größer ist als ZAHL. Wenn die Option -v (--invert-match verwendet wird, endet grep nach der Ausgabe von ZAHL nicht passenden Zeilen.

-o, --only-matching
    Anstatt der gesamten Zeile werden nur die passenden (nicht leeren) Teile ausgegeben. Jeder dieser Teile wird auf einer eigenen Zeile ausgegeben.

-q, --quiet, --silent
    Unterdrückt die normalen Ausgaben. Die Suche endet sofort nach dem ersten Treffer und gibt auch beim Auftreten von Fehlern den Status Null zurück. Lesen Sie auch die Beschreibung der Option -s oder --no-messages.

-s, --no-messages
    Unterdrückt Fehlermeldungen über nicht existierende oder unlesbare Dateien.

  Präfix-Festlegung der Ausgabezeilen

-b, --byte-offset
    Gibt vor jeder Ausgabezeile die Byte-Position in der Datei relativ zum Dateianfang (0) an. Wenn -o (--only-matching) angegeben wird, wird die Position des gefundenen Teils angezeigt.

-H, --with-filename
    Gibt vor jedem Treffer den zugehörigen Dateinamen aus. Das ist das Standardverhalten, wenn mehr als eine Datei untersucht wird. Dies ist eine GNU-Erweiterung.

-h, --no-filename
    Der Dateiname wird vor einem Treffer nicht ausgegeben. Das ist das Standardverhalten bei der Suche in nur einer Datei (oder nur in der Standardeingabe).

--label=TEXT
    Zeigt tatsächlich aus der Standardeingabe gelesene Eingaben an, als seien sie aus Datei TEXT gelesen. Das ist besonders praktisch für Werkzeuge, die den Inhalt von Dateien vor der Suche umwandeln, zum Beispiel gzip -cd foo.gz | grep --label=foo -H irgendwas (siehe auch die Option -H).

-n, --line-number
    Gibt vor jeder Zeile die Zeilennummer (gezählt ab 1) innerhalb der aktuellen Eingabedatei aus.

-T, --initial-tab
    Stellt sicher, dass das erste Zeichen des eigentlichen Zeileninhalts auf einem Tabulatorstopp liegt, so dass die Ausrichtung der Tabulatoren normal aussieht. Dies ist sinnvoll für die Optionen, die ihrer Ausgabe einen Präfix voranstellen: -H, -n und -b. Um die Wahrscheinlichkeit zu vergrößern, dass die Zeilen aus einer einzelnen Datei alle in der gleichen Spalte beginnen, bewirkt diese Option auch, dass (eventuell vorhandene) Zeilennummern und Byte-Offsets mit minimaler Feldgröße ausgegeben werden.

-Z, --null
    Gibt statt des üblichen Trennzeichens nach jedem Dateinamen ein Nullbyte (das ASCII-Zeichen NUL) aus. So gibt beispielsweise grep -lZ nach jedem Dateinamen statt des gebräuchlichen Zeilenumbruchs ein NULL-Byte aus. Mit dieser Option bleibt die Ausgabe selbst bei ungewöhnlichen Dateinamen, die beispielsweise einen Zeilenumbruch enthalten, eindeutig. Diese Option kann zusammen mit Befehlen wie find -print0, perl -0, sort -z und xargs -0 zur Verarbeitung beliebiger Dateinamen verwendet werden (auch solche, die Zeilenumbrüche enthalten).

  Steuerung der Kontextzeilen

-A ZAHL, --after-context=ZAHL
    Zeigt ZAHL Kontextzeilen im Anschluss an eine auf das Muster passende Zeile an. Gibt eine Zeile mit einem Gruppentrennzeichen (--) zwischen benachbarten Gruppen von Treffern aus. Zusammen mit der Option -o oder --only-matching hat diese Option keine Auswirkung und es wird eine Warnung ausgegeben.

-B ZAHL, --before-context=ZAHL
    Zeigt ZAHL Kontextzeilen vor einer auf das Muster passenden Zeile an.Gibt eine Zeile mit einem Gruppentrennzeichen (--) zwischen benachbarten Gruppen von Treffern aus. Zusammen mit der Option -o oder --only-matching hat diese Option keine Auswirkung und es wird eine Warnung ausgegeben.

-C [ZAHL], -ZAHL, --context[=ZAHL]
    Zeigt je ZAHL Kontextzeilen vor und nach einer auf das Muster passenden Zeile an. Gibt eine Zeile mit einem Gruppentrennzeichen (--) zwischen benachbarten Gruppen von Treffern aus. Zusammen mit der Option -o oder --only-matching hat diese Option keine Auswirkung und es wird eine Warnung ausgegeben.

--group-separator=TRENNZEICHEN
    zeigt bei Verwendung von -A, -B oder -C das angegebene TRENNZEICHEN anstatt -- zwischen Zeilengruppen an.

--no-group-separator
    zeigt bei Verwendung von -A, -B oder -C kein Trennzeichen zwischen Zeilengruppen an.

  Auswahl von Dateien und Verzeichnissen

-a, --text
    Verarbeitet eine Binärdatei, als wäre sie gewöhnlicher Text; dieser Schalter ist gleichwertig mit --binary-files=text.

--binary-files=TYP
    Falls die Daten oder Metadaten der Datei anzeigen, dass die Datei binäre Daten enthält, wird angenommen, dass die Datei vom Typ TYP ist. Bytes, die nicht Text sind, deuten Binärdaten an; diese sind entweder Ausgabebytes, die nicht korrekt für die aktuelle Locale kodiert wurden, oder Null-Eingabebytes, wenn die Option -z nicht angegeben ist.

    Standardmäßig ist TYP binary und grep unterdrückt weitere Ausgaben, wenn es Binärdaten als Eingabe erkennt und unterdrückt Ausgabezeilen, die inkorrekt kodierte Daten enthalten. Wenn Ausgaben unterdrückt werden, schreibt grep eine Meldung in die Standardfehlerausgabe, die besagt, dass ein Treffer in einer Binärdatei ist.

    Falls TYP without-match ist, wenn grep Null-Eingabedaten erkennt, dann nimmt es an, dass in der restlichen Datei keine Treffer sind. Dies ist zu der Option -I äquivalent.

    Falls TYP text ist, verarbeitet grep eine Binärdatei, als wäre sie gewöhnlicher Text. Dies ist zu der Option -a äquivalent.

    Falls TYP binary ist, kann grep von Text verschiedene Bytes selbst ohne die Option -z als Zeilende behandeln. Das bedeutet, die Wahl von binary gegenüber text kann beeinflussen, ob ein Muster auf eine Datei passt oder nicht. Ist beispielsweise TYP binary, könnte das Muster q$ auf q sofort gefolgt von einem NULL-Byte passen, selbst wenn dies nicht auf das Muster passt, wenn TYP text ist. Entsprechend kann das Muster . (Satzpunkt) nicht auf ein NULL-Byte passen, wenn TYP binary ist.

    Warnung: Die Option -a könnte binären Müll ausgeben, der negative Seiteneffekte haben kann, falls die Ausgabe auf ein Terminal erfolgt und der Terminaltreiber Teile davon als Befehle interpretiert. Andererseits kann es nützlich sein, -a zu verwenden oder LC_ALL='C' in der Umgebung zu setzen, wenn Texte gelesen werden, deren Kodierung unbekannt ist, um weitere Treffer zu finden, selbst wenn die Treffer für die direkte Anzeige nicht sicher sind.

-D AKTION, --devices=AKTION
    Wenn die Eingabedatei ein Gerät, ein FIFO oder ein Socket ist, wird sie mit AKTION verarbeitet. Die Standard-AKTION ist read. Das bedeutet, dass Geräte wie eine gewöhnliche Datei gelesen werden. Mit der AKTION skip werden Geräte stillschweigend ausgelassen.

-d AKTION, --directories=AKTION
    Ist eine Eingabedatei ein Verzeichnis, wird es mit der AKTION verarbeitet. In der Standardeinstellung ist AKTION auf read gesetzt, das bedeutet, dass Verzeichnisse wie gewöhnliche Dateien eingelesen werden. Ist AKTION auf skip gesetzt, so werden Verzeichnisse stillschweigend übersprungen. Steht AKTION auf recurse, so werden sämtliche Dateien unterhalb jedes Verzeichnisses rekursiv durchsucht. Symbolische Links werden nur verfolgt, wenn sie auf der Befehlszeile angegeben wurden. Dies ist zu der Option -r äquivalent.

--exclude=GLOB
    Überspringt jede Datei auf der Befehlszeile, deren Namenserweiterung auf das Muster GLOB mittels Platzhalter-Abgleich passt; eine Namenserweiterung ist entweder der gesamte Name oder jeder mit einem / beginnende angehängte Teil und vor einem nicht-/. Bei der rekursiven Suche werden alle Unterdateien übersprungen, deren Basisname auf GLOB passt; der Basisname ist der Teil nach dem letzten /. Ein Muster kann *, ? und […] als Platzhalter verwenden, und \, um ein buchstäbliches Platzhalter- oder Rückwärtsschrägstrichzeichen zu maskieren.

--exclude-from=DATEI
    Überspringt Dateien, deren Dateinamen zu einem (mittels Platzhalter-Abgleich wie unter --exclude beschrieben) aus DATEI gelesenen Dateinamen-»GLOB« passen.

--exclude-dir=GLOB
    Überspringt jedes Verzeichnis auf der Befehlszeile, dessen Namenserweiterung auf das Muster GLOB passt. Wenn Verzeichnisse rekursiv durchsucht werden, überspringt dies jedes Unterverzeichnis, dessen Basisname auf GLOB passt. Alle überflüssigen abschließenden Schrägstriche in GLOB werden ignoriert.

-I  Behandelt Binärdateien so, als würde ihr Inhalt nie auf das Suchmuster passen. Dies ist gleichbedeutend mit der Option --binary-files=without-match.

--include=GLOB
    Sucht nur nach Dateien, deren Basisname auf GLOB passt (mittels Platzhaltersuche wie unter --exclude beschrieben). Falls die kollidierenden Optionen --include und --exclude angegeben werden, hat Letztere Vorrang. Falls weder --include noch --exclude passt, wird eine Datei nur dann berücksichtigt, wenn die erste Option nicht --include ist.

-r, --recursive
    Durchsucht sämtliche Dateien unterhalb jedes Verzeichnisses rekursiv. Symbolische Links werden nur verfolgt, wenn sie auf der Befehlszeile angegeben wurden. Wenn kein Datei-Operand angegeben ist, durchsucht grep das Arbeitsverzeichnis. Dies ist zu der Option -d recurse äquivalent.

-R, --dereference-recursive
    Durchsucht sämtliche Dateien unterhalb jedes Verzeichnisses rekursiv. Allen symbolischen Links folgen, anders als -r.

  Weitere Optionen

--line-buffered
    Verwendet bei der Ausgabe Zeilenpuffer. Das kann Leistungseinbußen bewirken.

-U, --binary
    Verarbeitet die Datei(en) als Binärdaten. Unter MS-DOS und MS-Windows versucht grep herauszufinden, ob eine Datei Text oder binär ist, wie dies bei der Option --binary-files beschrieben ist. In einer von grep zu einer Textdatei erklärten Datei entfernt es intern alle Wagenrücklaufzeichen (CR), damit ^ und $ in regulären Ausdrücken korrekt funktionieren. Die Angabe von -U umgeht die ganze Raterei und weist grep an, jede Datei exakt so zu verarbeiten, wie sie eingelesen wurde. Falls es sich um eine Textdatei handelt, deren Zeilen mit einem kombinierten Wagenrücklauf und Zeilenumbruch (CR/LF) enden, arbeiten manche reguläre Ausdrücke fehlerhaft. Diese Option hat auf anderen Plattformen als MS-DOS und MS-Windows keine Auswirkungen.

-z, --null-data
    Behandelt Ein- und Ausgabedaten als Folge von Zeilen, die jede mit einem NULL-Byte (das Zeichen ASCII NUL) anstelle eines Zeilenvorschubs endet. Wie die Optionen -Z oder --null kann diese Option zusammen mit Befehlen wie sort -z für die Verarbeitung beliebiger Dateinamen eingesetzt werden.

REGULÄRE AUSDRÜCKE
Unter einem regulären Ausdruck versteht man ein Muster, das eine Menge von Zeichenketten beschreibt. Reguläre Ausdrücke werden analog zu arithmetischen Ausdrücken aufgebaut: Sie werden mit Hilfe verschiedener Operatoren aus kleineren Ausdrücken zusammengesetzt.

grep versteht drei verschiedene Klassen regulärer Ausdrücke: »gewöhnliche« (basic, BRE), »erweiterte« (extended, ERE) und »perl« (PCRE). GNU grep stellt für gewöhnliche und erweiterte reguläre Ausdrücke die gleiche Funktionalität bereit. In anderen Implementierungen steht mit gewöhnlichen regulären Ausdrücken jedoch nur ein eingeschränkter Funktionsumfang zur Verfügung. Die folgende Beschreibung bezieht sich auf erweiterte reguläre Ausdrücke; die Unterschiede zu gewöhnlichen regulären Ausdrücken werden im Anschluss daran zusammengefasst. Die Perl-kompatiblen regulären Ausdrücke stellen zusätzliche Funktionen bereit und sind in pcresyntax(3) und pcrepattern(3) dokumentiert, funktionieren aber nur, wenn PCRE-Unterstützung aktiviert ist.

Grundlegende Bausteine sind die regulären Ausdrücke, die auf ein einzelnes Zeichen passen. Die meisten Zeichen, insbesondere alle Buchstaben und Ziffern, sind zugleich reguläre Ausdrücke, die auf sich selbst passen. Alle Metazeichen, die eine besondere Bedeutung besitzen, können durch einen vorangestellten Rückschrägstrich geschützt werden.

Der Punkt . steht für jedes einzelne Zeichen. Es ist nicht festgelegt, ob er auf einen Kodierfehler passt.

  Zeichenklassen und Klammerausdrücke
Ein Klammerausdruck ist eine durch [ und ] eingeschlossene Liste von Zeichen. Er passt auf jedes Zeichen aus der Liste. Beginnt die Liste mit dem Symbol ^, so passt der Ausdruck auf alle Zeichen, die nicht in der Liste enthalten sind; es ist nicht spezifiziert, ob es auf einen Kodierfehler passt. Beispielsweise passt der reguläre Ausdruck [0123456789] auf eine beliebige einzelne Ziffer.

Innerhalb eines Klammerausdrucks sind Bereichsausdrücke (range expressions) möglich. Ein Bereichsausdruck besteht aus zwei durch einen Bindestrich getrennten Zeichen. Er steht für ein einzelnes Zeichen einschließlich der Begrenzungszeichen, das gemäß der Sortierreihenfolge der Locale und dem Zeichensatz zwischen den beiden Begrenzungszeichen liegt. Zum Beispiel ist in der Standard-Locale C [ad] äquivalent zu [abcd]. Viele Locales sortieren Zeichen in der Wörterbuch-Reihenfolge. Dort ist [ad] in der Regel nicht gleichwertig mit [abcd]; es wäre zum Beispiel gleichbedeutend mit [aBbCcDd]. Um die traditionelle Interpretation von Klammerausdrücken zu bewirken, können Sie die C-Locale verwenden. Dazu setzen Sie die Umgebungsvariable LC_ALL auf den Wert C.

Schließlich gibt es noch einige vordefinierte Zeichenklassen innerhalb von Klammerausdrücken mit (im Englischen) selbsterklärenden Namen. Das sind im Einzelnen: [:alnum:] (Buchstaben und Ziffern), [:alpha:] (Buchstaben), [:blank:],[:cntrl:] (Steuerzeichen), [:digit:] (Ziffern), [:graph:] (graphische Zeichen, das heißt [:alnum:] und [:punct:]), [:lower:] (Kleinbuchstaben), [:print:] (druckbare Zeichen), [:punct:] (Satzzeichen), [:space:] (Leerraum), [:upper:] (Großbuchstaben) und [:xdigit:] (Ziffern des Hexadezimalsystems). So bedeutet beispielsweise [[:alnum:]] die Zeichenklasse der Ziffern und Buchstaben in der aktuellen Locale. In der C-Locale und der Zeichenkodierung ASCII ist dies dasselbe wie [0-9A-Za-z]. (Beachten Sie, dass die eckigen Klammern Teil des symbolischen Namens der einzelnen Klassen sind. Zusätzlich dazu müssen noch die eckigen Klammern angegeben werden, die eine Liste von Zeichen begrenzen.) Die meisten Metazeichen verlieren innerhalb eines Klammerausdrucks ihre besondere Bedeutung. Um ein ] selbst zu beschreiben, muss es an erster Stelle der Kette gesetzt werden. Soll ^ als gewöhnliches Zeichen auftreten, darf es nicht an erster Stelle stehen. Das Zeichen - selbst muss an letzter Stelle der Kette auftauchen.

  Setzen von Ankern
Die Metazeichen Dach ^ und Dollar $ passen auf die leere Zeichenkette am Anfang beziehungsweise Ende einer Zeile.

  Das Backslash-Zeichen (Rückschrägstrich) und spezielle Ausdrücke
Ganz ähnlich passen die Symbole \< und \> auf die leere Zeichenkette am Anfang beziehungsweise Ende eines Wortes. Das Symbol \b passt auf die leere Zeichenkette an einem Wortrand; \B bezeichnet das Gegenteil davon und passt auf die leere Zeichenkette, falls die sich nicht an einem Wortrand befindet. Das Symbol \w ist ein Synonym für [_[:alnum:]] und \W steht für [^_[:alnum:]].

  Wiederholungen
Einem regulären Ausdruck können einer oder mehrere Wiederholungsoperatoren folgen:
?   Das vorhergehende Objekt ist optional und tritt höchstens einmal auf.
*   Das vorhergehende Objekt tritt kein Mal oder beliebig oft auf.
+   Das vorhergehende Objekt tritt ein- oder mehrmals auf.
{n} Das vorhergehende Objekt tritt genau n-mal auf.
{n,}
    Das vorhergehende Objekt tritt n-mal oder öfter auf.
{,m}
    Das vorhergehende Objekt tritt höchstens m-mal auf. Dies ist eine GNU-Erweiterung.
{n,m}
    Das vorhergehende Objekt tritt mindestens n- und höchstens m-mal auf.

  Verknüpfung
Zwei reguläre Ausdrücke können verbunden werden. Der entstehende reguläre Ausdruck passt auf jede Zeichenkette, die aus zwei aneinander gesetzten Teilketten, die auf die zugehörigen Teilausdrücke passen, besteht.

  Alternativen
Sind zwei reguläre Ausdrücke durch den Infix-Operator | verbunden, so passt der gesamte reguläre Ausdruck auf jede Zeichenkette, die auf einen der beiden Teilausdrücke passt.

  Priorität
Wiederholungsoperatoren besitzen höhere Priorität als eine Aneinanderreihung. Am niedrigsten ist die Priorität der Alternative. Teilausdrücke können in Klammern gesetzt werden, um diese Regeln explizit abzuändern.

  Rückwärtsverweise und Teilausdrücke
Die Rückwärtsreferenz \n - wobei n für eine einzelne Ziffer steht - steht für die Zeichenkette, die wiederum auf den vorhergehenden, eingeklammerten Teilausdruck Nummer n des regulären Ausdrucks passt.

  Vergleich gewöhnlicher und erweiterter regulärer Ausdrücke
In gewöhnlichen regulären Ausdrücken besitzen die Metazeichen ?, +, {, }, |, ( und ) keine besondere Bedeutung. Stattdessen müssen die mit einem Rückschrägstrich geschützten Versionen \?, \+, \{, \}, \|, \( und \) verwendet werden.

EXIT-STATUS
Normalerweise ist der Exit-Status 0, wenn eine Zeile ausgewählt ist, 1 wenn keine Zeilen ausgewählt wurden, und 2 wenn ein Fehler aufgetreten ist. Allerdings ist der Exit-Status auch dann 0, wenn ein Fehler aufgetreten ist, sofern die Optionen -q, --quiet oder --silent übergeben wurden und eine Zeile ausgewählt ist.

UMGEBUNGSVARIABLEN
Das Verhalten von grep wird durch die folgenden Umgebungsvariablen bestimmt.

Die Locale für die Kategorie LC_foo wird durch die Untersuchung der drei Umgebungsvariablen LC_ALL, LC_foo und LANG (in dieser Reihenfolge) bestimmt. Die erste dieser Variablen, die gesetzt ist, gibt die Locale an. Ist beispielsweise LC_ALL nicht, dafür aber LC_MESSAGES auf pt_BR gesetzt, dann wird für die Kategorie LC_MESSAGES brasilianisches Portugiesisch verwendet. Die C-Locale wird verwendet, wenn keine dieser Umgebungsvariablen gesetzt ist, wenn der Locale-Katalog nicht installiert ist oder wenn grep ohne Unterstützung für Landessprachen (national language support, NLS) kompiliert wurde. Der Shell-Befehl locale -a zeigt die derzeit verfügbaren Locales an.

GREP_COLORS
    Gibt die Farben und andere Attribute an, die für Markierung verschiedener Elemente der Ausgabe verwendet werden. Ihr Wert ist eine durch Doppelpunkte getrennte Liste von Fähigkeiten, deren Standardwert gleich ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36 ist. (Die booleschen Fähigkeiten rv und ne sind also weggelassen (d.h. auf auf false gesetzt)). Es werden die folgenden Fähigkeiten unterstützt.

    sl= SGR-Teilsequenz für ganze ausgewählte Zeilen (d.h. übereinstimmende Zeilen, wenn die Befehlszeilenoption -v weggelassen wird oder nicht übereinstimmende Zeilen, wenn -v angegeben wird). Wenn jedoch sowohl die boolesche Fähigkeit rv als auch die Befehlszeilenoption -v angegeben werden, gilt die Option stattdessen für passende Kontextzeilen. Der Standardwert ist leer (d.h. das Standard-Farbpaar des Terminals).

    cx= SGR-Teilsequenz für ganze Kontextzeilen (d.h. nicht übereinstimmende Zeilen, wenn die Befehlszeilenoption -v weggelassen wird oder übereinstimmende Zeilen, wenn -v angegeben wird). Wenn jedoch sowohl die boolesche Fähigkeit rv als auch die Befehlszeilenoption -v angegeben werden, gilt die Option stattdessen für nicht passende Zeilen. Der Standardwert ist leer (d.h. das Standard-Farbpaar des Terminals).

    rv  Boolescher Wert, der die Bedeutung der Fähigkeiten sl= und cx= vertauscht, wenn die Befehlszeilenoption -v gewählt wird. Der Standardwert ist false (d.h. die Fähigkeit wird nicht genutzt).

    mt=01;31
        SGR-Teilsequenz für passenden, nicht leeren Text in jeder passenden Zeile (d.h. einer ausgewählten Zeile, wenn die Befehlszeilenoption -v weggelassen wird oder einer Kontextzeile, wenn -v angegeben wurde). Die Wahl dieser Option ist gleichwertig mit der Wahl des gleichen Wertes für ms= und mc=. Der Standardwert ist fetter roter Text vor der aktuellen Hintergrundfarbe der Zeile.

    ms=01;31
        SGR-Teilsequenz für passenden, nicht leeren Text in einer ausgewählten Zeile. (Dies wird nur verwendet, wenn die Befehlszeilenoption -v weggelassen wird.) Die Wirkung der Fähigkeit sl= (oder cx=, wenn rv gesetzt ist) bleibt aktiv, wenn diese auftritt. Der Standardwert ist ein fetter roter Text vor dem aktuellen Zeilenhintergrund.

    mc=01;31
        SGR-Teilsequenz für passenden, nicht leeren Text in einer Kontextzeile. (Dies wird nur verwendet, wenn die Befehlszeilenoption -v gewählt wird.) Die Wirkung der Fähigkeit cx= (oder sl=, wenn rv gesetzt ist) bleibt aktiv, wenn diese sich aktivieren. Der Standardwert ist ein fetter roter Text vor dem aktuellen Zeilenhintergrund.

    fn=35
        SGR-Teilsequenz für Dateinamen, die beliebigen Kontextzeilen vorausgehen. Standard ist ein violetter Textvordergrund vor dem Standardhintergrund des Terminals.

    ln=32
        SGR-Teilsequenz für Zeilennummern, die beliebigen Kontextzeilen vorausgehen. Standard ist ein grüner Textvordergrund vor dem Standardhintergrund des Terminals.

    bn=32
        SGR-Teilsequenz für »Byte Offsets«, die beliebigen Kontextzeilen vorausgehen. Standard ist ein grüner Textvordergrund vor dem Standardhintergrund des Terminals.

    se=36
        SGR-Teilsequenz für Separatoren, die zwischen die Felder für ausgewählte Zeilen (:), für Kontextzeilen (-) und zwischen Gruppen von benachbarten Zeilen (wenn ein von Null verschiedener Kontext gewählt wurde (--)) eingefügt werden. Der Standardwert ist ein blaugrüner (cyan) Textvordergrund vor dem Standardhintergrund des Terminals.

    ne  Boolescher Wert, der das Löschen bis zum Zeilenende mittels »Erase in Line (EL) to Right« (\33[K) verhindert, wenn ein eingefärbtes Element endet. Er wird für Terminals benötigt, die EL nicht unterstützten. Ansonsten ist er nützlich für Terminals, für die die boolesche Terminfo-Fähigkeit back_color_erase (bce) nicht gilt, wenn die gewählten Markierungsfarben nicht den Hintergrund beeinflussen oder wenn EL zu langsam ist oder zu viel Flackern verursacht. Der Standardwert ist false (d.h. die Fähigkeit wird weggelassen).

    Beachten Sie, dass boolesche Fähigkeiten keinen =…-Teil aufweisen. Sie werden per Vorgabe weggelassen (d.h. auf false gesetzt) und werden aktiviert, wenn sie angegeben werden.

    Im Abschnitt »Wahl der grafischen Darstellung« (Select Graphic Rendition, SGR) der Dokumentation des Textterminals finden Sie zulässige Werte und ihre Bedeutung als Zeichenattribute. Diese Teilzeichenkettenwerte sind ganze Zahlen in Dezimaldarstellung und können mit einem Semikolon verbunden werden. grep erzeugt aus dem Ergebnis eine vollständige SGR-Sequenz (\33[…m). Gebräuchliche Bestandteile der Sequenz sind 1 für fett, 4 für unterstrichen, 5 für blinken, 7 für inverse Darstellung, 39 für Standard-Vordergrundfarbe, 30 bis 37 für die Farben im Vordergrund, 90 bis 97 für Vordergrundfarben im 16-Farben-Modus, 38,5,0 bis 38,5,255 für Vordergrundfarben in den 88-Farben- und 256-Farben-Modi, 49 für die Standard-Hintergrundfarbe, 40 bis 47 für Hintergrundfarben, 100 bis 107 für Hintergrundfarben im 16-Farben-Modus und 48,5,0 bis 48,5,255 für Hintergrundfarben in den 88-Farben- und 256-Farben-Modi.

LC_ALL, LC_COLLATE, LANG
    Diese Variablen gibt die Locale für die Kategorie LC_CTYPE an. Sie bestimmt die Sortierreihenfolge, mit der Ausdrücke zur Angabe eines Bereichs wie beispielsweise [a-z] ausgewertet werden.

LC_ALL, LC_CTYPE, LANG
    Diese Variablen gibt die Locale für die Kategorie LC_CTYPE an, die die Art der Zeichen festlegt, z.B. welche Zeichen Leerraumzeichen sind. Diese Kategorie bestimmt auch die Zeichenkodierung, d.h. ob Text in UTF-8, ASCII oder einer anderen Kodierung vorliegt. In der C- oder POSIX-Locale sind alle Zeichen als einzelnes Byte kodiert und jedes Byte ist ein gültiges Zeichen.

LC_ALL, LC_MESSAGES, LANG
    Diese Variablen wählen die Locale für die Kategorie LC_MESSAGES. Diese legt fest, in welcher Sprache grep seine Meldungen ausgibt. Die Standard-Locale C verwendet Meldungen in amerikanischem Englisch.

POSIXLY_CORRECT
    Falls gesetzt, verhält sich grep strikt nach dem POSIX-Standard. Anderenfalls ähnelt sein Verhalten eher dem anderer GNU-Programme. POSIX verlangt von Optionen, die nach einem Dateinamen angegeben sind, dass sie als Dateinamen behandelt werden. Normalerweise behandelt grep sie immer als Optionen, gleichgültig an welcher Stelle sie auftreten. Ferner verlangt POSIX, unbekannte Optionen als »unzulässig« anzuzeigen. In den Standardeinstellungen meldet grep sie lediglich als »ungültig«'. POSIXLY_CORRECT deaktiviert auch _N_GNU_nonoption_argv_flags_, das im Folgenden genauer beschrieben wird.

_N_GNU_nonoption_argv_flags_
    (Hier ist N die numerische Kennung des grep-Prozesses.) Falls das i-te Zeichen dieser Umgebungsvariablen den Wert 1 hat, wird das i-te Argument von grep nicht als Option verarbeitet, selbst wenn es wie eine Option aussieht. Ein Befehlszeileninterpreter kann diese Umgebungsvariable für jeden von ihm ausgeführten Befehl setzen, um anzuzeigen, welche der Argumente durch Ersetzung von Platzhaltern Mustererkennung von Dateinamen erzeugt worden sind und deshalb keinesfalls als Optionen berücksichtigt werden sollen. Dieses Verhalten steht nur in Verbindung mit der GNU-C-Bibliothek zur Verfügung und nur dann, wenn POSIXLY_CORRECT nicht gesetzt ist.

ANMERKUNGEN
Diese Handbuchseite wird nur sporadisch aktualisiert, die vollständige Dokumentation ist meistens aktueller.

COPYRIGHT
Copyright 1998-2000, 2002, 2005-2022 Free Software Foundation, Inc.

Dies ist freie Software, in den Quellen finden Sie die Bedingungen zur Weitergabe. Es gibt KEINE Garantie, auch nicht für die MARKTREIFE oder die TAUGLICHKEIT FÜR EINEN BESTIMMTEN ZWECK.

FEHLER

  Fehler berichten
Schicken Sie Fehlermeldungen (auf Englisch) per E-Mail an die Fehlermeldeadresse (bug-grep@gnu.org). Ein E-Mail-Archiv (https://lists.gnu.org/mailman/listinfo/bug-grep) und eine Fehlerdatenbank (https://debbugs.gnu.org/cgi/pkgreport.cgi?package=grep) sind verfügbar.

  Bekannte Fehler
Eine große Zahl von Wiederholungen im Konstrukt {m,n} kann dazu führen, dass grep sehr viel Speicherplatz verbraucht. Darüber hinaus gibt es noch weitere ungewöhnliche reguläre Ausdrücke, deren Verarbeitung exponentiell viel Zeit und Speicher benötigt und dazu führen kann, dass grep den Speicherplatz erschöpft.

Rückwärtsreferenzen sind sehr langsam und können exponentiell viel Zeit in Anspruch nehmen.

BEISPIEL
Das folgende Beispiel gibt den Ort und den Inhalt jeder Zeile aus, die ein »f« enthält und mit »c« endet, innerhalb aller Dateien im aktuellen Verzeichnis, deren Namen ein »g« enthalten und mit ».h« enden. Die Option -n gibt Zeilennummern aus, das Argument -- fasst Erweiterungen von »*g*.h«, die mit »-« beginnen, als Dateinamen und nicht als Optionen auf, und die leere Datei /dev/null lässt Dateinamen auch dann ausgeben, wenn nur ein Dateiname der Form »*g*.h« entspricht.

    $ grep -n -- 'f.*\.c$' *g*.h /dev/null
    argmatch.h:1:/* definitions and prototypes for argmatch.c

Die einzige Trefferzeile ist die Zeile 1 von argmatch.h. Beachten Sie, das die in dem Muster verwendete Syntax regulärer Ausdrücke sich von der Globbing-Syntax unterscheidet, die von der Shell zum Finden von Dateinamenübereinstimmungen verwendet wird.

SIEHE AUCH

  Normale Handbuchseiten
awk(1), cmp(1), diff(1), find(1), perl(1), sed(1), sort(1), xargs(1), read(2), pcre2(3), pcre2syntax(3), pcre2pattern(3), terminfo(5), glob(7), regex(7)

  Komplette Dokumentation
Es ist ein vollständiges Handbuch (https://www.gnu.org/software/grep/manual/) verfügbar. Wenn die Programme info und grep auf Ihrem Rechner ordnungsgemäß installiert sind, können Sie mit dem Befehl

    info grep

auf das vollständige Handbuch zugreifen.

ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer <Martin.E.Schauer@gmx.de>, Mario Blättermann <mario.blaettermann@gmail.com>, Dr. Tobias Quathamer <toddy@debian.org> und Helge Kreutzmann <debian@helgefjell.de> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html) oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer (debian-l10n-german@lists.debian.org).