grep, egrep, fgrep, rgrep - gibt Zeilen aus, die zu Suchmustern
passen
ÜBERSICHT
grep [OPTION…] MUSTER
[DATEI…]
grep [OPTION…] -e MUSTER …
[DATEI…]
grep [OPTION…] -f MUSTERDATEI …
[DATEI…]
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.
Zusätzlich entsprechen die Programmvarianten egrep,
fgrep und rgrep den Aufrufen grep -E,
grep -F und grep -r. Diese Varianten sind von
den Originalautoren veraltet und stehen unter Debian nur noch aus
Gründen der Abwärtskompatibilität zur Verfügung.
Aus Portabilitätsgründen wird empfohlen, die Programmvarianten
zu vermeiden und stattdessen grep mit den zugehörigen Optionen
zu verwenden.
- --help
- zeigt Informationen zur Benutzung an und beendet das Programm.
- -V, --version
- gibt die Versionsnummer von grep und beendet das Programm.
- -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.
- -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 $.
- -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.
- -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 (Nullbyte)) aus. So gibt
beispielsweise grep -lZ nach jedem Dateinamen statt des
gebräuchlichen Zeilenumbruchs ein Nullbyte 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).
- -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.
- -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 Nullbyte passen, selbst
wenn dies nicht auf das Muster passt, wenn TYP text ist.
Entsprechend kann das Muster . (Satzpunkt) nicht auf ein Nullbyte
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.
- --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 (Nullbyte)) 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.
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.
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.
Die Metazeichen Dach ^ und Dollar $ passen auf die
leere Zeichenkette am Anfang beziehungsweise Ende einer Zeile.
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:]].
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.
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.
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.
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.
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.
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.
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
- Steuert, wie die Option --color die Ausgabenhervorhebung
durchführt. 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 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.
Diese Handbuchseite wird nur sporadisch aktualisiert, die
vollständige Dokumentation ist meistens aktueller.
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.
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.
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.
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.
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)
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⟩.