grep, egrep, fgrep, rgrep - Zeilen ausgeben, die mit Mustern übereinstimmen
SYNOPSIS
grep [OPTION]... PATTERNS [FILE]...
grep [OPTION]... -e PATTERNS ... [FILE]...
grep [OPTION]... -f PATTERN_FILE ... [FILE]...
DESCRIPTION
grep sucht in jeder DATEI nach Mustern. In der ersten Form der Synopsis, die verwendet wird, wenn keine -e- oder -f-Optionen vorhanden sind, ist die erste Operande PATTERNS eine oder mehrere durch Zeilenumbrüche getrennte Muster, und grep gibt jede Zeile aus, die mit einem Muster übereinstimmt. In der Regel sollten PATTERNS in Anführungszeichen gesetzt werden, wenn grep in einem Shell-Befehl verwendet wird.
Eine DATEI mit "-" steht für die Standardeingabe. Wenn keine DATEI angegeben wird, werden bei rekursiven Suchen das aktuelle Verzeichnis und bei nicht rekursiven Suchen die Standardeingabe durchsucht.
Debian enthält auch die Variantenprogramme egrep, fgrep und rgrep. Diese Programme sind die gleichen wie grep -E, grep -F bzw. grep -r. Diese Varianten sind im Upstream veraltet, aber Debian stellt sie zur Abwärtskompatibilität bereit. Aus Gründen der Portabilität wird empfohlen, die Variantenprogramme zu vermeiden und stattdessen grep mit der entsprechenden Option zu verwenden.
OPTIONEN
Allgemeine Programminformationen
--help Gibt eine Hilfemeldung aus und beendet das Programm.
-V, --version
Gibt die Versionsnummer von grep aus und beendet das Programm.
Muster-Syntax
-E, --extended-regexp
Interpretiert PATTERNS als erweiterte reguläre Ausdrücke (EREs, siehe unten).
-F, --fixed-strings
Interpretiert PATTERNS als feste Zeichenketten, nicht als reguläre Ausdrücke.
-G, --basic-regexp
Interpretiert PATTERNS als einfache reguläre Ausdrücke (BREs, siehe unten). Dies ist die Standardeinstellung.
-P, --perl-regexp
Interpretiert PATTERNS als Perl-kompatible reguläre Ausdrücke (PCREs). Diese Option ist in Kombination mit der Option -z (--null-data) experimentell, und grep -P kann vor nicht implementierten Funktionen warnen.
Übereinstimmungssteuerung
-e PATTERNS, --regexp=PATTERNS
Verwendet PATTERNS als Muster. Wenn diese Option mehrmals verwendet wird oder mit der Option -f (--file) kombiniert wird, werden alle angegebenen Muster durchsucht. Diese Option kann verwendet werden, um ein mit "-" beginnendes Muster zu schützen.
-f DATEI, --file=DATEI
Liest Muster aus der DATEI, wobei jede Zeile ein Muster enthält. Wenn diese Option mehrmals verwendet wird oder mit der Option -e (--regexp) kombiniert wird, werden alle angegebenen Muster durchsucht. Eine leere Datei enthält null Muster und stimmt daher mit nichts überein. Wenn DATEI - ist, werden Muster aus der Standardeingabe gelesen.
-i, --ignore-case
Ignoriert Groß- und Kleinschreibung in Mustern und Eingabedaten, sodass Zeichen, die sich nur in der Groß- und Kleinschreibung unterscheiden, übereinstimmen.
--no-ignore-case
Ignoriert die Groß- und Kleinschreibung in Mustern und Eingabedaten nicht. Dies ist die Standardeinstellung. Diese Option ist nützlich, um an Shell-Skripte zu übergeben, die bereits -i verwenden, um deren Auswirkungen aufzuheben, da sich die beiden Optionen gegenseitig überschreiben.
-v, --invert-match
Kehrt die Bedeutung der Übereinstimmung um, um nicht übereinstimmende Zeilen auszuwählen.
-w, --word-regexp
Wählt nur diejenigen Zeilen aus, die Übereinstimmungen enthalten, die ganze Wörter bilden. Der Test ist, dass die übereinstimmende Teilzeichenkette entweder am Anfang der Zeile stehen muss oder von einem Nicht-Wort-Zeichen vorausgegangen wird. Ebenso muss sie entweder am Ende der Zeile stehen oder von einem Nicht-Wort-Zeichen gefolgt werden. Wort-Zeichen sind Buchstaben, Ziffern und der Unterstrich. Diese Option hat keine Wirkung, wenn auch -x angegeben ist.
-x, --line-regexp
Wählt nur diejenigen Übereinstimmungen aus, die genau der gesamten Zeile entsprechen. Für ein reguläres Ausdrucksmuster entspricht dies dem Einfassen des Musters in Klammern und dem anschließenden Umgeben mit ^ und $.
Allgemeine Ausgabesteuerung
-c, --count
Unterdrückt die normale Ausgabe; stattdessen wird die Anzahl der übereinstimmenden Zeilen für jede Eingabedatei ausgegeben. Mit der Option -v, --invert-match (siehe oben) wird die Anzahl der nicht übereinstimmenden Zeilen ausgegeben.
--color[=WHEN], --colour[=WHEN]
Umschließt die übereinstimmenden (nicht leeren) Zeichenketten, übereinstimmenden Zeilen, Kontextzeilen, Dateinamen, Zeilennummern, Byte-Offsets und Trennzeichen (für Felder und Kontextzeilengruppen) mit Escape-Sequenzen, um sie farbig auf dem Terminal anzuzeigen. Die Farben werden durch die Umgebungsvariable GREP_COLORS definiert. WHEN ist nie, immer oder auto.
-L, --files-without-match
Unterdrückt die normale Ausgabe; stattdessen wird der Name jeder Eingabedatei ausgegeben, aus der normalerweise keine Ausgabe erfolgen würde.
-l, --files-with-matches
Unterdrückt die normale Ausgabe; stattdessen wird der Name jeder Eingabedatei ausgegeben, aus der normalerweise eine Ausgabe erfolgen würde. Das Scannen jeder Eingabedatei wird nach der ersten Übereinstimmung beendet.
-m NUM, --max-count=NUM
Stoppt das Lesen einer Datei nach NUM übereinstimmenden Zeilen. Wenn NUM null ist, stoppt grep sofort, ohne Eingaben zu lesen. Eine NUM von -1 wird als unendlich behandelt, und grep stoppt nicht; dies ist der Standard. Wenn die Eingabe die Standardeingabe aus einer regulären Datei ist und NUM übereinstimmende Zeilen ausgegeben werden, stellt grep sicher, dass sich die Standardeingabe nach der letzten übereinstimmenden Zeile befindet, bevor sie beendet wird, unabhängig von der Existenz nachfolgender Kontextzeilen. Dadurch kann ein aufrufender Prozess die Suche fortsetzen. Wenn grep nach NUM übereinstimmenden Zeilen stoppt, gibt er 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, nachdem NUM nicht übereinstimmende Zeilen ausgegeben wurden.
-o, --only-matching
Gibt nur die übereinstimmenden (nicht leeren) Teile einer übereinstimmenden Zeile aus, wobei jeder Teil in einer separaten Ausgabezeile steht.
-q, --quiet, --silent
Leise; es wird nichts in die Standardausgabe geschrieben. Beendet sofort mit dem Status Null, wenn eine Übereinstimmung gefunden wurde, auch wenn ein Fehler erkannt wurde. Siehe auch die Option -s oder --no-messages.
-s, --no-messages
Unterdrückt Fehlermeldungen über nicht vorhandene oder nicht lesbare Dateien.
Steuerungsoptionen für die Ausgabezeilenpräfixe
-b, --byte-offset
Gibt den 0-basierten Byte-Offset innerhalb der Eingabedatei vor jeder Ausgabezeile aus. Wenn -o (--only-matching) angegeben ist, wird der Offset des übereinstimmenden Teils selbst ausgegeben.
-H, --with-filename
Gibt den Dateinamen für jede Übereinstimmung aus. Dies ist die Standardeinstellung, wenn mehr als eine Datei durchsucht wird. Dies ist eine GNU-Erweiterung.
-h, --no-filename
Unterdrückt die vorangestellte Ausgabe von Dateinamen. Dies ist die Standardeinstellung, wenn nur eine Datei (oder nur Standardeingabe) durchsucht wird.
--label=LABEL
Zeigt die Eingabe, die tatsächlich von der Standardeingabe stammt, als Eingabe an, die von der Datei LABEL stammt. Dies kann für Befehle nützlich sein, die den Inhalt einer Datei transformieren, bevor sie gesucht wird, z. B. gzip -cd foo.gz | grep --label=foo -H 'ein Muster'. Siehe auch die Option -H.
-n, --line-number
Fügt jeder Ausgabezeile die 1-basierte Zeilennummer innerhalb der Eingabedatei voran.
-T, --initial-tab
Stellt sicher, dass das erste Zeichen des eigentlichen Zeileninhalts auf einer Tabstopposition liegt, so dass die Ausrichtung von Tabulatoren normal aussieht. Dies ist nützlich bei Optionen, die ihre Ausgabe vor den eigentlichen Inhalt setzen: -H, -n und -b. Um die Wahrscheinlichkeit zu erhöhen, dass alle Zeilen aus einer einzigen Datei in derselben Spalte beginnen, werden auch die Zeilennummer und der Byte-Offset (falls vorhanden) in einem minimalen Feldbreite ausgegeben.
-Z, --null
Gibt ein Null-Byte (das ASCII-NUL-Zeichen) anstelle des Zeichens aus, das normalerweise auf einen Dateinamen folgt. Zum Beispiel gibt grep -lZ nach jedem Dateinamen ein Null-Byte anstelle der üblichen neue Zeile aus. Diese Option macht die Ausgabe eindeutig, auch wenn Dateinamen ungewöhnliche Zeichen wie neue Zeilen 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 neue Zeilen enthalten.
Steuerungsoptionen für den Kontext von Zeilen
-A NUM, --after-context=NUM
Gibt NUM Zeilen des nachfolgenden Kontexts nach den übereinstimmenden Zeilen aus. Fügt eine Zeile ein, die einen Gruppentrenner (--) zwischen zusammenhängenden Gruppen von Übereinstimmungen enthält. Mit der Option -o oder --only-matching hat dies keine Auswirkung, und es wird eine Warnung ausgegeben.
-B NUM, --before-context=NUM
Gibt NUM Zeilen des vorhergehenden Kontexts vor den übereinstimmenden Zeilen aus. Fügt eine Zeile ein, die einen Gruppentrenner (--) zwischen zusammenhängenden Gruppen von Übereinstimmungen enthält. Mit der Option -o oder --only-matching hat dies keine Auswirkung, und es wird eine Warnung ausgegeben.
-C NUM, -NUM, --context=NUM
Gibt NUM Zeilen des Ausgabekontexts aus. Fügt eine Zeile ein, die einen Gruppentrenner (--) zwischen zusammenhängenden Gruppen von Übereinstimmungen enthält. Mit der Option -o oder --only-matching hat dies keine Auswirkung, und es wird eine Warnung ausgegeben.
--group-separator=SEP
Wenn -A, -B oder -C verwendet werden, geben Sie SEP anstelle von -- zwischen Gruppen von Zeilen aus.
--no-group-separator
Wenn -A, -B oder -C verwendet werden, geben Sie keinen Trenner zwischen Gruppen von Zeilen aus.
Dateiauswahl und Verzeichnisauswahl
-a, --text
Behandelt eine Binärdatei, als wäre sie Text; dies entspricht der Option --binary-files=text.
--binary-files=TYPE
Wenn die Daten oder Metadaten einer Datei darauf hindeuten, dass die Datei Binärdaten enthält, wird angenommen, dass die Datei vom Typ TYPE ist. Nicht-Text-Bytes deuten auf Binärdaten hin; dies sind entweder Ausgabebyte, die für die aktuelle Gebietsschema falsch codiert sind, oder Null-Eingabebyte, wenn die Option -z nicht angegeben ist.
Standardmäßig ist TYPE binary, und grep unterdrückt die Ausgabe, nachdem Null-Eingabe-Binärdaten gefunden wurden, und unterdrückt Ausgabelinien, die falsch codierte Daten enthalten. Wenn einige Ausgaben unterdrückt werden, gibt grep nachfolgend eine Meldung an die Standardausgabe aus, die besagt, dass eine Binärdatei übereinstimmt.
Wenn TYPE without-match ist, geht grep davon aus, dass der Rest der Datei nicht übereinstimmt, wenn Null-Eingabe-Binärdaten gefunden werden; dies entspricht der Option -I.
Wenn TYPE text ist, verarbeitet grep eine Binärdatei, als wäre sie Text; dies entspricht der Option -a.
Wenn der Typ binary ist, kann grep Nicht-Text-Bytes auch ohne die Option -z als Zeilenendezeichen behandeln. Das bedeutet, dass die Wahl zwischen binary und text beeinflussen kann, ob ein Muster mit einer Datei übereinstimmt. Zum Beispiel kann das Muster q$ übereinstimmen, wenn der Typ binary ist, was bedeutet, dass es mit q übereinstimmt, gefolgt von einem Null-Byte, auch wenn dies nicht übereinstimmt, wenn der Typ text ist. Umgekehrt kann das Muster . (Punkt) nicht mit einem Null-Byte übereinstimmen, wenn der Typ binary ist.
Warnung: Die Option -a kann Binär-Müll ausgeben, was unerwünschte Nebenwirkungen haben kann, wenn die Ausgabe ein Terminal ist und der Terminaltreiber einige davon als Befehle interpretiert. Andererseits kann es hilfreich sein, -a zu verwenden oder LC_ALL='C' in der Umgebung festzulegen, um mehr Übereinstimmungen zu finden, selbst wenn diese nicht sicher für die direkte Anzeige sind, wenn Dateien mit unbekannten Textcodierungen gelesen werden.
-D AKTION, --devices=AKTION
Wenn eine Eingabedatei ein Gerät, eine FIFO oder ein Socket ist, wird AKTION verwendet, um sie zu verarbeiten. Standardmäßig ist AKTION read, was bedeutet, dass Geräte genauso gelesen werden wie normale Dateien. Wenn AKTION skip ist, werden Geräte stillschweigend übersprungen.
-d AKTION, --directories=AKTION
Wenn eine Eingabedatei ein Verzeichnis ist, wird AKTION verwendet, um sie zu verarbeiten. Standardmäßig ist AKTION read, d. h. Verzeichnisse werden genauso gelesen wie normale Dateien. Wenn AKTION skip ist, werden Verzeichnisse stillschweigend übersprungen. Wenn AKTION recurse ist, werden alle Dateien unter jedem Verzeichnis rekursiv gelesen, wobei symbolische Links nur dann verfolgt werden, wenn sie sich auf der Befehlszeile befinden. Dies entspricht der Option -r.
--exclude=GLOB
Überspringt jede Datei auf der Befehlszeile, deren Name mit dem Muster GLOB übereinstimmt, wobei Wildcard-Matching verwendet wird; ein Namenssuffix ist entweder der gesamte Name oder ein nachgestellter Teil, der unmittelbar nach einem Schrägstrich (/) im Namen mit einem Nicht-Schrägstrich-Zeichen beginnt. Beim rekursiven Suchen wird jede Unterdatei übersprungen, deren Basisname mit GLOB übereinstimmt; der Basisname ist der Teil nach dem letzten Schrägstrich. Ein Muster kann *, ?, und […] als Wildcards und \ zum literalen Zitieren einer Wildcard oder eines Backslash-Zeichens verwenden.
--exclude-from=DATEI
Überspringt Dateien, deren Basisname mit einem der in DATEI gelesenen Dateinamenglobmuster übereinstimmt (unter Verwendung der Wildcard-Vergleichsweise, wie unter --exclude beschrieben).
--exclude-dir=GLOB
Überspringt jedes Verzeichnis in der Befehlszeile, dessen Name auf das Muster GLOB passt. Beim rekursiven Suchen werden alle Unterverzeichnisse übersprungen, deren Basisname mit GLOB übereinstimmt. Ignoriert alle überflüssigen nachgestellten Schrägstriche in GLOB.
-I Prozessiert eine Binärdatei, als ob sie keine übereinstimmenden Daten enthielte; dies entspricht der Option --binary-files=without-match.
--include=GLOB
Durchsucht nur Dateien, deren Basisname mit GLOB übereinstimmt (unter Verwendung der Wildcard-Vergleichsweise, wie unter --exclude beschrieben). Wenn widersprüchliche Optionen --include und --exclude angegeben werden, gewinnt die zuletzt übereinstimmende. Wenn keine der Optionen --include oder --exclude übereinstimmt, wird eine Datei einbezogen, es sei denn, die erste Option ist --include.
-r, --recursive
Liest alle Dateien unter jedem Verzeichnis rekursiv, wobei symbolische Links nur dann verfolgt werden, wenn sie sich in der Befehlszeile befinden. Beachten Sie, dass grep, wenn kein Dateiopoperand angegeben wird, das aktuelle Verzeichnis durchsucht. Dies entspricht der Option -d recurse.
-R, --dereference-recursive
Liest alle Dateien unter jedem Verzeichnis rekursiv. Verfolgt alle symbolischen Links, im Gegensatz zu -r.
Andere Optionen
--line-buffered
Verwendet zeilenweises Puffern für die Ausgabe. Dies kann zu Leistungseinbußen führen.
-U, --binary
Behandelt die Datei(en) als binär. Standardmäßig schätzt grep unter MS-DOS und MS-Windows, ob eine Datei Text oder Binär ist, wie in der Option --binary-files beschrieben. Wenn grep entscheidet, dass die Datei eine Textdatei ist, entfernt es die CR-Zeichen aus dem ursprünglichen Dateiinhalt (um sicherzustellen, dass reguläre Ausdrücke mit ^ und $ korrekt funktionieren). Durch die Angabe von -U wird diese Vermutung außer Kraft gesetzt, wodurch alle Dateien unverändert gelesen und an den Abgleichsmechanismus ü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 auf anderen Plattformen als MS-DOS und MS-Windows keine Auswirkung.
-z, --null-data
Behandelt Eingabe- und Ausgabedaten als Sequenzen von Zeilen, die jeweils mit einem Nullbyte (dem ASCII NUL-Zeichen) anstelle eines Zeilenumbruchs enden. Wie die Option -Z oder --null kann diese Option mit Befehlen wie sort -z verwendet werden, um beliebige Dateinamen zu verarbeiten.
REGULÄRE AUSDRÜCKE
Ein regulärer Ausdruck ist ein Muster, das eine Menge von Zeichenketten beschreibt. Reguläre Ausdrücke werden analog zu arithmetischen Ausdrücken konstruiert, indem verschiedene Operatoren verwendet werden, um kleinere Ausdrücke zu kombinieren.
grep versteht drei verschiedene Versionen der Syntax für reguläre Ausdrücke: "basic" (BRE), "extended" (ERE) und "perl" (PCRE). In GNU grep sind grundlegende und erweiterte reguläre Ausdrücke lediglich unterschiedliche Notationen für die gleiche Mustervergleichsfunktionalität. In anderen Implementierungen sind grundlegende reguläre Ausdrücke in der Regel weniger leistungsfähig als erweiterte, obwohl es gelegentlich auch anders sein kann. Die folgende Beschreibung gilt für erweiterte reguläre Ausdrücke; Unterschiede für grundlegende reguläre Ausdrücke sind später zusammengefasst. Perl-kompatible reguläre Ausdrücke haben eine andere Funktionalität und sind in pcre2syntax(3) und pcre2pattern(3) dokumentiert, funktionieren aber nur, wenn die PCRE-Unterstützung aktiviert ist.
Die grundlegenden Bausteine sind die regulären Ausdrücke, die ein einzelnes Zeichen zuordnen. Die meisten Zeichen, einschließlich aller Buchstaben und Ziffern, sind reguläre Ausdrücke, die sie selbst zuordnen. Jedes Meta-Zeichen mit spezieller Bedeutung kann durch Voranstellen eines Backslashs maskiert werden.
Der Punkt . ordnet jedes einzelne Zeichen zu. Es ist nicht definiert, ob er auch Encodierungsfehler zuordnet.
Zeichenklassen und Klammerausdrücke
Ein Klammerausdruck ist eine Liste von Zeichen, die von [ und ] eingeschlossen werden. Er ordnet jedes einzelne Zeichen in dieser Liste zu. Wenn das erste Zeichen in der Liste ein Caret ^ ist, wird jedes Zeichen zugeordnet, das nicht in der Liste enthalten ist; es ist nicht definiert, ob er auch Encodierungsfehler zuordnet. Zum Beispiel ordnet der reguläre Ausdruck [0123456789] jedes einzelne Zeichen zu.
Innerhalb eines Klammerausdrucks besteht ein Bereichsausdruck aus zwei Zeichen, die durch einen Bindestrich getrennt sind. In der Standard-C-Locale werden alle Zeichen zugeordnet, die in ASCII-Reihenfolge zwischen den beiden Zeichen enthalten sind. Zum Beispiel ist [a-d] äquivalent zu [abcd]. In anderen Locales ist das Verhalten nicht definiert: [a-d] kann äquivalent zu [abcd] oder [aBbCcDd] oder einem anderen Klammerausdruck sein, oder es kann fehlschlagen, jedes Zeichen zuzuordnen, oder die Menge der Zeichen, die er zuordnet, kann unvorhersehbar sein, oder es kann ungültig sein. Um die traditionelle Interpretation von Klammerausdrücken zu erhalten, können Sie die C-Locale verwenden, indem Sie die Umgebungsvariable LC_ALL auf den Wert C setzen.
Schließlich sind innerhalb von Klammerausdrücken bestimmte benannte Zeichenklassen vordefiniert, und zwar wie folgt. Ihre Namen sind selbsterklärend, und sie sind [:alnum:], [:alpha:], [:blank:], [:cntrl:], [:digit:], [:graph:], [:lower:], [:print:], [:punct:], [:space:], [:upper:] und [:xdigit:]. Zum Beispiel bedeutet [[:alnum:]] die Zeichenklasse von Zahlen und Buchstaben in der aktuellen Locale. In der C-Locale und der ASCII-Zeichensatzkodierung ist dies dasselbe wie [0-9A-Za-z]. (Beachten Sie, dass die Klammern in diesen Klassennamen Teil der symbolischen Namen sind und zusätzlich zu den Klammern, die den Klammerausdruck begrenzen, enthalten sein müssen.) Die meisten Meta-Zeichen verlieren ihre spezielle Bedeutung innerhalb von Klammerausdrücken. Um ein Literal ] einzuschließen, setzen Sie es an den Anfang der Liste. Ebenso, um ein Literal ^ einzuschließen, setzen Sie es irgendwo, aber nicht an den Anfang. Schließlich, um ein Literal - einzuschließen, setzen Sie es ans Ende.
Anker
Das Caret ^ und das Dollarzeichen $ sind Meta-Zeichen, die jeweils die leere Zeichenkette am Anfang bzw. Ende einer Zeile zuordnen.
Das Backslash-Zeichen und spezielle Ausdrücke
Die Symbole \< und > ordnen jeweils die leere Zeichenkette am Anfang und Ende eines Wortes zu. Das Symbol \b ordnet die leere Zeichenkette am Rand eines Wortes zu, und \B ordnet die leere Zeichenkette zu, vorausgesetzt, es befindet sich nicht am Rand eines Wortes. Das Symbol \w ist ein Synonym für [[:alnum:]] und \W ist ein Synonym für [^[:alnum:]].
Wiederholung
Ein regulärer Ausdruck kann von einem der folgenden Wiederholungsoperatoren gefolgt werden: ? Das vorhergehende Element ist optional und wird höchstens einmal abgeglichen. * Das vorhergehende Element wird null oder mehrmals abgeglichen. + Das vorhergehende Element wird ein oder mehrmals abgeglichen. {n} Das vorhergehende Element wird genau n-mal abgeglichen. {n,} Das vorhergehende Element wird n-mal oder öfter abgeglichen. {,m} Das vorhergehende Element wird höchstens m-mal abgeglichen. Dies ist eine GNU-Erweiterung. {n,m} Das vorhergehende Element wird mindestens n-mal, aber nicht öfter als m-mal abgeglichen.
Konkatenation
Zwei reguläre Ausdrücke können miteinander verkettet werden; der resultierende reguläre Ausdruck stimmt mit jeder Zeichenkette überein, die durch die Verkettung von zwei Teilzeichenketten entsteht, die jeweils mit den verketteten Ausdrücken übereinstimmen.
Alternation
Zwei reguläre Ausdrücke können durch den Infix-Operator | verbunden werden; der resultierende reguläre Ausdruck stimmt mit jeder Zeichenkette überein, die mit einem der beiden alternativen Ausdrücke übereinstimmt.
Präzedenz
Die Wiederholung hat Vorrang vor der Konkatenation, die wiederum Vorrang vor der Alternation hat. Ein ganzer Ausdruck kann in Klammern eingeschlossen werden, um diese Vorrangregeln außer Kraft zu setzen und eine Subexpression zu bilden.
Rückbezüge und Subexpressionen
Der Rückbezug \n, wobei n eine einzelne Ziffer ist, stimmt mit der zuvor durch die n-te in Klammern eingeschlossene Subexpression des regulären Ausdrucks abgeglichenen Teilzeichenkette überein.
Grundlegende vs. erweiterte reguläre Ausdrücke
In grundlegenden regulären Ausdrücken verlieren die Metazeichen ?, +, {, |, (, und ) ihre spezielle Bedeutung; verwenden Sie stattdessen die mit einem Backslash versehenen Versionen \?, +, {, |, ( und ).
EXIT-STATUS
Normalerweise ist der Exit-Status 0, wenn eine Zeile ausgewählt wurde, 1, wenn keine Zeilen ausgewählt wurden, und 2, wenn ein Fehler aufgetreten ist. Wenn jedoch die Option -q oder --quiet oder --silent verwendet wird und eine Zeile ausgewählt wurde, ist der Exit-Status 0, auch wenn ein Fehler aufgetreten ist.
UMGEBUNG
Das Verhalten von grep wird von den folgenden Umgebungsvariablen beeinflusst.
Die Gebietssprache für die Kategorie LC_foo wird durch die Untersuchung der drei Umgebungsvariablen LC_ALL, LC_foo, LANG in dieser Reihenfolge angegeben. Die erste dieser Variablen, die gesetzt ist, gibt die Gebietssprache an. Zum Beispiel, wenn LC_ALL nicht gesetzt ist, aber LC_MESSAGES auf pt_BR gesetzt ist, wird die brasilianische Portugiesische Gebietssprache für die Kategorie LC_MESSAGES verwendet. Die C-Gebietssprache wird verwendet, wenn keine dieser Umgebungsvariablen gesetzt ist, wenn das Gebietssprache-Katalog nicht installiert ist oder wenn grep nicht mit Unterstützung für nationale Sprachen (NLS) kompiliert wurde. Der Shell-Befehl locale -a listet die derzeit verfügbaren Gebietssprachen auf.
GREP_COLORS
Steuert, wie die Option --color die Ausgabe hervorhebt. Der Wert ist eine durch Doppelpunkte getrennte Liste von Funktionen, die standardmäßig ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36 lautet, wobei die booleschen Funktionen rv und ne weggelassen werden (d. h. falsch). Die unterstützten Funktionen sind wie folgt:
sl= SGR-Substrings für ganze ausgewählte Zeilen (d. h. übereinstimmende Zeilen, wenn die Befehlszeilenoption -v weggelassen wird, oder nicht übereinstimmende Zeilen, wenn -v angegeben ist). Wenn jedoch sowohl die boolesche rv-Funktion als auch die Befehlszeilenoption -v angegeben sind, gilt dies für den übereinstimmenden Kontext. Der Standardwert ist leer (d. h. das Farbpaar des Terminals).
cx= SGR-Substrings für ganze Kontextzeilen (d. h. nicht übereinstimmende Zeilen, wenn die Befehlszeilenoption -v weggelassen wird, oder übereinstimmende Zeilen, wenn -v angegeben ist). Wenn jedoch sowohl die boolesche rv-Funktion als auch die Befehlszeilenoption -v angegeben sind, gilt dies für die ausgewählten nicht übereinstimmenden Zeilen. Der Standardwert ist leer (d. h. das Farbpaar des Terminals).
rv Boolescher Wert, der die Bedeutung der sl= und cx= Funktionen umkehrt (austauscht), wenn die Befehlszeilenoption -v angegeben ist. Der Standardwert ist „false“ (d. h. die Funktion wird weggelassen).
mt=01;31
SGR-Substrings für übereinstimmenden, nicht leeren Text in einer beliebigen übereinstimmenden Zeile (d. h. eine ausgewählte Zeile, wenn die Befehlszeilenoption -v weggelassen wird, oder eine Kontextzeile, wenn -v angegeben ist). Das Setzen dieses Wertes entspricht dem gleichzeitigen Setzen von ms= und mc= auf denselben Wert. Der Standardwert ist ein fett gedruckter roter Text im Vordergrund über dem aktuellen Zeilenhintergrund.
ms=01;31
SGR-Substrings für übereinstimmenden, nicht leeren Text in einer ausgewählten Zeile. (Dies wird nur verwendet, wenn die Befehlszeilenoption -v weggelassen wird.) Die Wirkung der sl= (oder cx=, wenn rv) Funktion bleibt aktiv, wenn dies eintritt. Der Standardwert ist ein fett gedruckter roter Text im Vordergrund über dem aktuellen Zeilenhintergrund.
mc=01;31
SGR-Substrings für übereinstimmenden, nicht leeren Text in einer Kontextzeile. (Dies wird nur verwendet, wenn die Befehlszeilenoption -v angegeben ist.) Die Wirkung der cx= (oder sl=, wenn rv) Funktion bleibt aktiv, wenn dies eintritt. Der Standardwert ist ein fett gedruckter roter Text im Vordergrund über dem aktuellen Zeilenhintergrund.
fn=35 SGR-Substrings für Dateinamen, die vor jedem Inhalt stehen. Der Standardwert ist ein magentafarbener Text im Vordergrund über dem Standardhintergrund des Terminals.
ln=32 SGR-Substrings für Zeilennummern, die vor jedem Inhalt stehen. Der Standardwert ist ein grüner Text im Vordergrund über dem Standardhintergrund des Terminals.
bn=32 SGR-Substrings für Byte-Offsets, die vor jedem Inhalt stehen. Der Standardwert ist ein grüner Text im Vordergrund über dem Standardhintergrund des Terminals.
se=36 SGR-Substrings für Trennzeichen, die zwischen ausgewählte Zeilenfelder (:) und zwischen Kontextzeilenfelder (-) sowie zwischen Gruppen benachbarter Zeilen eingefügt werden, wenn ein ungleich Null Kontext angegeben ist (--). Der Standardwert ist ein cyanfarbener Text im Vordergrund über dem Standardhintergrund des Terminals.
ne Boolescher Wert, der verhindert, dass die Zeile mit „Erase in Line (EL)“ bis zum Zeilenende jedes Mal gelöscht wird, wenn ein farblich hervorgehobenes Element endet. Dies ist für Terminals erforderlich, auf denen EL nicht unterstützt wird. Es ist auch für Terminals nützlich, für die die boolesche `back_color_erase` (bce) Terminfo-Funktion nicht gilt, wenn die gewählten Hervorhebungsfarben den Hintergrund nicht beeinflussen oder wenn EL zu langsam ist oder zu viel Flimmern verursacht. Der Standardwert ist „false“ (d. h. die Funktion wird weggelassen).
Beachten Sie, dass boolesche Funktionen kein =... -Teil haben. Sie werden standardmäßig weggelassen (d. h. falsch) und werden bei Angabe zu „wahr“.
Siehe den Abschnitt „Select Graphic Rendition (SGR)“ in der Dokumentation des verwendeten Textterminals für zulässige Werte und deren Bedeutung als Zeichenattribute. Diese Teilzeichenfolgenwerte sind ganze Zahlen in dezimaler Darstellung und können mit Semikolons verkettet werden. grep übernimmt die Zusammenstellung des Ergebnisses zu einer vollständigen SGR-Sequenz (\33[...m). Häufige Werte, die verkettet werden können, sind 1 für fett, 4 für unterstrichen, 5 für blinkend, 7 für invertiert, 39 für Standard-Vordergrundfarbe, 30 bis 37 für Vordergrundfarben, 90 bis 97 für 16-Farben-Modus-Vordergrundfarben, 38;5;0 bis 38;5;255 für 88-Farben- und 256-Farben-Modus-Vordergrundfarben, 49 für Standard-Hintergrundfarbe, 40 bis 47 für Hintergrundfarben, 100 bis 107 für 16-Farben-Modus-Hintergrundfarben und 48;5;0 bis 48;5;255 für 88-Farben- und 256-Farben-Modus-Hintergrundfarben.
LC_ALL, LC_COLLATE, LANG
Diese Variablen geben die Gebietsschema für die Kategorie LC_COLLATE an, die die Sortierreihenfolge bestimmt, die zur Interpretation von Bereichsausdrücken wie [a-z] verwendet wird.
LC_ALL, LC_CTYPE, LANG
Diese Variablen geben die Gebietsschema für die Kategorie LC_CTYPE an, die die Art der Zeichen bestimmt, z. B. welche Zeichen Leerzeichen sind. Diese Kategorie bestimmt auch die Zeichenkodierung, d. h. ob Text in UTF-8, ASCII oder einer anderen Kodierung codiert ist. Im C- oder POSIX-Gebietsschema werden alle Zeichen als ein einzelnes Byte codiert, und jedes Byte ist ein gültiges Zeichen.
LC_ALL, LC_MESSAGES, LANG
Diese Variablen geben die Gebietsschema für die Kategorie LC_MESSAGES an, die die Sprache bestimmt, die grep für Nachrichten verwendet. Das Standard-C-Gebietsschema verwendet englische Nachrichten.
POSIXLY_CORRECT
Wenn diese Variable gesetzt ist, verhält sich grep so, wie es POSIX erfordert; andernfalls verhält sich grep eher wie andere GNU-Programme. POSIX erfordert, dass Optionen, die auf Dateinamen folgen, als Dateinamen behandelt werden müssen; standardmäßig werden solche Optionen jedoch an den Anfang der Operandenliste verschoben und als Optionen behandelt. POSIX erfordert außerdem, dass nicht erkannte Optionen als „illegal“ diagnostiziert werden, aber da sie nicht wirklich gegen das Gesetz verstoßen, ist die Standardeinstellung, sie als „ungültig“ zu diagnostizieren.
HINWEISE
Diese Manpage wird nur gelegentlich gepflegt; die vollständige Dokumentation ist oft aktueller.
URHEBERRECHT
Copyright 1998–2000, 2002, 2005–2025 Free Software Foundation, Inc.
Dies ist freie Software; siehe den Quellcode für die Bedingungen zum Kopieren. Es gibt KEINE GARANTIE, nicht einmal für die MARKTGÄNGIGKEIT oder die EIGNUNG FÜR EINEN BESTIMMTEN ZWECK.
FEHLER
Fehler melden
Senden Sie Fehlerberichte an die Fehler-E-Mail-Adresse. Ein E-Mail-Archiv und ein Fehler-Tracker sind verfügbar.
Bekannte Fehler
Große Wiederholungszahlen in der {n,m}-Konstruktion können dazu führen, dass grep viel Speicher verwendet. Darüber hinaus benötigen bestimmte andere obskure reguläre Ausdrücke exponentielle Zeit und Speicher, und können dazu führen, dass grep keinen Speicher mehr hat.
Rückbezüge sind sehr langsam und benötigen möglicherweise exponentielle Zeit.
BEISPIEL
Das folgende Beispiel gibt die Position und den Inhalt jeder Zeile aus, die „f“ enthält und mit „.c“ endet, in allen Dateien im aktuellen Verzeichnis, deren Namen „g“ enthalten und mit „.h“ enden. Die Option -n gibt die Zeilennummern aus, die Option -- behandelt die Erweiterungen von „*g*.h“, die mit „-“ beginnen, als Dateinamen und nicht als Optionen, und die leere Datei /dev/null bewirkt, dass Dateinamen ausgegeben werden, selbst wenn nur ein Dateiname die Form „*g*.h“ hat.
$ grep -n -- 'f.*\.c$' *g*.h /dev/null
argmatch.h:1:/* definitions and prototypes for argmatch.c
Die einzige übereinstimmende Zeile ist Zeile 1 von argmatch.h. Beachten Sie, dass sich die Syntax des regulären Ausdrucks, der im Muster verwendet wird, von der Globbing-Syntax unterscheidet, die die Shell zum Abgleichen von Dateinamen verwendet.
SIEHE AUCH
Regelmäßige 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)
Vollständige Dokumentation
Eine vollständige Anleitung ist verfügbar. Wenn die Programme info und grep an Ihrem Standort ordnungsgemäß installiert sind, sollte der Befehl
info grep
Ihnen Zugriff auf die vollständige Anleitung geben.