Linux egrep Befehl

egrep Befehl

Unter Unix-ähnlichen Betriebssystemen sucht der Befehl egrep nach einem Textmuster und verwendet erweiterte reguläre Ausdrücke, um die Übereinstimmung durchzuführen. Das Ausführen von egrep entspricht dem Ausführen von grep mit der Option -E.

Dieses Dokument behandelt die GNU / Linux-Version von egrep.


Syntax

egrep [Optionen] MUSTER [DATEI ...]

Options

-A NUM, --after-context = NUM Drucken Sie NUM-Zeilen des nachfolgenden Kontexts nach dem Abgleichen der Zeilen. Platziert eine Zeile mit - zwischen zusammenhängenden Übereinstimmungsgruppen.
-ein Text Verarbeiten Sie eine Binärdatei wie Text. Dies entspricht der Option --binary-files = text.
-B NUM, --before-context = NUM Drucken Sie NUM-Zeilen des führenden Kontexts, bevor Sie die Zeilen abgleichen. Platziert eine Zeile mit - zwischen zusammenhängenden Übereinstimmungsgruppen.
-C NUM, --context = NUM Drucken Sie NUM-Zeilen des Ausgabekontexts. Platziert eine Zeile mit - zwischen zusammenhängenden Übereinstimmungsgruppen.
-b, --byte-offset Drucken Sie den Byte-Offset in der Eingabedatei vor jeder Ausgabezeile.
--binary-files = TYPE Wenn die ersten paar Bytes einer Datei anzeigen, dass die Datei Binärdaten enthält, nehmen Sie an, dass die Datei vom Typ TYPE ist. Standardmäßig ist TYPE binär, und grep gibt normalerweise entweder eine einzeilige Nachricht aus, die besagt, dass eine Binärdatei übereinstimmt, oder keine Nachricht, wenn keine Übereinstimmung vorliegt. Wenn TYPE nicht übereinstimmt, geht grep davon aus, dass eine Binärdatei nicht übereinstimmt. Dies entspricht der Option -I. Wenn TYPE Text ist, verarbeitet grep eine Binärdatei wie Text. Dies entspricht der Option -a. Warnung: grep --binary-files = text gibt möglicherweise binären Müll aus, der böse Nebenwirkungen haben kann, wenn die Ausgabe ein Terminal ist und der Terminaltreiber einige davon als Befehle interpretiert.
- Farbe [= WANN], - Farbe [= WANN] Umgeben Sie die übereinstimmende Zeichenfolge mit der Markierungssuche in der Umgebungsvariablen GREP_COLOR. WANN kann "nie", "immer" oder "automatisch" sein
-c, --count Normale Ausgabe unterdrücken; Drucken Sie stattdessen eine Anzahl übereinstimmender Zeilen für jede Eingabedatei. Zählen Sie mit der Option -v, --invert-match (siehe unten) nicht übereinstimmende Zeilen.
-D ACTION, --devices = ACTION Wenn eine Eingabedatei ein Gerät, ein FIFO oder ein Socket ist, verwenden Sie ACTION, um sie zu verarbeiten. Standardmäßig wird ACTION gelesen. Dies bedeutet, dass Geräte so gelesen werden, als wären sie normale Dateien. Wenn ACTION übersprungen wird, werden Geräte stillschweigend übersprungen.
-d ACTION, --directories = ACTION Wenn eine Eingabedatei ein Verzeichnis ist, verwenden Sie ACTION, um sie zu verarbeiten. Standardmäßig wird ACTION gelesen. Dies bedeutet, dass Verzeichnisse so gelesen werden, als wären sie normale Dateien. Wenn ACTION übersprungen wird, werden Verzeichnisse stillschweigend übersprungen. Wenn ACTION rekursiv ist, liest grep alle Dateien unter jedem Verzeichnis rekursiv. Dies entspricht der Option -r.
-e MUSTER, --regexp = MUSTER Verwenden Sie MUSTER als Muster. nützlich, um Muster zu schützen, die mit "-" beginnen.
-F, --fixed-Strings Interpretieren Sie PATTERN als eine Liste fester Zeichenfolgen, die durch Zeilenumbrüche getrennt sind und übereinstimmen können.
-P, --perl-regexp Interpretieren Sie PATTERN als regulären Perl-Ausdruck.
-f DATEI, --Datei = DATEI Erhalten Sie Muster aus DATEI, eines pro Zeile. Die leere Datei enthält keine Muster und stimmt daher mit nichts überein.
-G, --basic-regexp Interpretieren Sie MUSTER als einen grundlegenden regulären Ausdruck (siehe unten). Dies ist die Standardeinstellung.
-H, --mit Dateiname Drucken Sie den Dateinamen für jede Übereinstimmung.
-h, --no-Dateiname Unterdrücken Sie das Präfix von Dateinamen bei der Ausgabe, wenn mehrere Dateien durchsucht werden.
--help Geben Sie eine kurze Hilfemeldung aus.
-I Verarbeiten Sie eine Binärdatei so, als ob sie keine übereinstimmenden Daten enthält. Dies entspricht der Option --binary-files = without-match.
-i, --ignore-case Ignorieren Sie die Unterscheidung zwischen Groß- und Kleinschreibung sowohl im MUSTER als auch in den Eingabedateien.
-L, --files-without-match Normale Ausgabe unterdrücken; Drucken Sie stattdessen den Namen jeder Eingabedatei, aus der normalerweise keine Ausgabe gedruckt worden wäre. Der Scanvorgang wird beim ersten Spiel beendet.
-l, --Dateien mit Übereinstimmungen Normale Ausgabe unterdrücken; Drucken Sie stattdessen den Namen jeder Eingabedatei, aus der normalerweise die Ausgabe gedruckt worden wäre. Der Scanvorgang wird beim ersten Spiel beendet.
-m NUM, --max-count = NUM Beenden Sie das Lesen einer Datei nach NUM-Übereinstimmungszeilen. Wenn es sich bei der Eingabe um eine Standardeingabe aus einer regulären Datei handelt und NUM-Übereinstimmungszeilen ausgegeben werden, stellt grep sicher, dass die Standardeingabe vor dem Beenden unmittelbar nach der letzten übereinstimmenden Zeile positioniert wird, unabhängig davon, ob nachfolgende Kontextzeilen vorhanden sind. Dadurch kann ein aufrufender Prozess eine Suche fortsetzen. Wenn grep nach NUM-Übereinstimmungszeilen stoppt, werden alle nachfolgenden Kontextzeilen ausgegeben. Wenn auch die Option -c oder --count verwendet wird, gibt grep keine Anzahl größer als NUM aus. Wenn auch die Option -v oder --invert-match verwendet wird, stoppt grep nach der Ausgabe von NUM-nicht übereinstimmenden Zeilen.
--mmap Verwenden Sie nach Möglichkeit den Systemaufruf mmap zum Lesen der Eingabe anstelle des Standardaufrufs zum Lesen des Systems. In einigen Situationen bietet --mmap eine bessere Leistung. --Mmap kann jedoch zu undefiniertem Verhalten (einschließlich Core-Dumps) führen, wenn eine Eingabedatei während des Betriebs von grep verkleinert wird oder wenn ein E / A-Fehler auftritt.
-n, - Zeilennummer Stellen Sie jeder Ausgabezeile die Zeilennummer in der Eingabedatei voran.
-o, --nur passend Zeigen Sie nur den Teil einer übereinstimmenden Zeile an, der mit MUSTER übereinstimmt.
--label = LABEL Zeigt die Eingabe an, die tatsächlich von der Standardeingabe stammt, als Eingabe aus der Datei LABEL. Dies ist besonders nützlich für Tools wie zgrep, z. B. gzip -cd foo.gz | grep -H --label = foo Something
--line-gepuffert Verwenden Sie die Zeilenpufferung. Dies kann zu Leistungseinbußen führen.
-q, --quiet, --silent Ruhe; Schreiben Sie nichts in die Standardausgabe. Beenden Sie das Programm sofort mit dem Status Null, wenn eine Übereinstimmung gefunden wird, auch wenn ein Fehler festgestellt wurde. Siehe auch die Option -s oder --no-messages.
-R, -r, --rekursiv Lesen Sie alle Dateien unter jedem Verzeichnis rekursiv. Dies entspricht der Option -d recurse. Geändert durch: - include = PATTERN Rekurs in Verzeichnissen, die nur nach Dateien suchen, die mit PATTERN übereinstimmen .-- exclude = PATTERN Rekurs in Verzeichnissen, die mit PATTERN übereinstimmen.
-s, --no-Nachrichten Unterdrücken Sie Fehlermeldungen zu nicht vorhandenen oder nicht lesbaren Dateien. Hinweis zur Portabilität: Im Gegensatz zu GNU grep entsprach traditionelles grep nicht POSIX.2, da herkömmlichem grep die Option -q fehlte und sich die Option -s wie die Option -q von GNU grep verhielt. Shell-Skripte, die auf herkömmliches grep portierbar sein sollen, sollten sowohl -q als auch -s vermeiden und stattdessen die Ausgabe nach / dev / null umleiten.
-U, --binary Behandeln Sie die Datei (en) als binär. Standardmäßig errät grep unter MS-DOS und MS Windows den Dateityp anhand des Inhalts der ersten 32 KB, die aus der Datei gelesen wurden. Wenn grep entscheidet, dass es sich bei der Datei um eine Textdatei handelt, werden die CR-Zeichen aus dem ursprünglichen Dateiinhalt entfernt (damit reguläre Ausdrücke mit ^ und $ ordnungsgemäß funktionieren). Durch die Angabe von -U wird dieses Rätselraten außer Kraft gesetzt, sodass alle Dateien gelesen und wörtlich an den Übereinstimmungsmechanismus übergeben werden. Wenn es sich bei der Datei um eine Textdatei mit CR / LF-Paaren am Ende jeder Zeile handelt, schlagen einige reguläre Ausdrücke fehl. Diese Option hat keine Auswirkungen auf andere Plattformen als MS-DOS und MS-Windows.
-u, --unix-Byte-Offsets Unix-artige Byte-Offsets melden. Dieser Schalter bewirkt, dass grep Byte-Offsets meldet, als wäre die Datei eine Textdatei im Unix-Stil, dh ohne CR-Zeichen. Dies führt zu Ergebnissen, die mit dem Ausführen von grep auf einem Unix-Computer identisch sind. Diese Option hat keine Auswirkung, es sei denn, die Option -b wird ebenfalls verwendet. Es hat keine Auswirkungen auf andere Plattformen als MS-DOS und MS-Windows.
-V, --version Drucken Sie die Versionsnummer von grep auf Standardfehler. Diese Versionsnummer sollte in allen Fehlerberichten enthalten sein (siehe unten).
-v, --invert-match Invertieren Sie den Übereinstimmungssinn, um nicht übereinstimmende Linien auszuwählen.
-w, --word-regexp Wählen Sie nur die Zeilen aus, die Übereinstimmungen enthalten, die ganze Wörter bilden. Der Test besteht darin, dass der übereinstimmende Teilstring entweder am Anfang der Zeile stehen muss oder ein nicht wortgebundenes Zeichen vorangestellt sein muss. Ebenso muss es entweder am Ende der Zeile stehen oder von einem Nicht-Wort-Bestandteil gefolgt werden. Wortbestandteilszeichen sind Buchstaben, Ziffern und der Unterstrich.
-x, --line-regexp Wählen Sie nur die Übereinstimmungen aus, die genau mit der gesamten Zeile übereinstimmen.
-y Veraltetes Synonym für -i.
-Z, --null Geben Sie anstelle des Zeichens, das normalerweise einem Dateinamen folgt, ein Null-Byte (das ASCII-NULL-Zeichen) aus. Beispielsweise gibt grep -lZ nach jedem Dateinamen anstelle des üblichen Zeilenumbruchs ein Null-Byte aus. Diese Option macht die Ausgabe auch bei Dateinamen mit ungewöhnlichen Zeichen wie Zeilenumbrüchen eindeutig. 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 Zeilenumbruchzeichen enthalten.

Reguläre Ausdrücke

Ein regulärer Ausdruck ist ein Muster, das eine Reihe von Zeichenfolgen 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 zwei verschiedene Versionen der Syntax regulärer Ausdrücke: "Basic" und "Extended". In GNU grep gibt es bei beiden Syntax keinen Unterschied in der verfügbaren Funktionalität. In anderen Implementierungen sind reguläre Grundausdrücke weniger leistungsfähig. Die folgende Beschreibung gilt für erweiterte reguläre Ausdrücke, die in egrep verwendet werden. Unterschiede für grundlegende reguläre Ausdrücke werden anschließend zusammengefasst.

Die Grundbausteine ​​sind die regulären Ausdrücke, die einem einzelnen Zeichen entsprechen. Die meisten Zeichen, einschließlich aller Buchstaben und Ziffern, sind reguläre Ausdrücke, die mit sich selbst übereinstimmen. Jedes Metazeichen mit besonderer Bedeutung kann durch einen Backslash zitiert werden.

Ein Klammerausdruck ist eine Liste von Zeichen, die von [und] eingeschlossen werden. Es stimmt mit jedem einzelnen Zeichen in dieser Liste überein. Wenn das erste Zeichen der Liste das Caret ^ ist, stimmt es mit jedem Zeichen überein, das nicht in der Liste enthalten ist. Beispielsweise stimmt der reguläre Ausdruck [0123456789] mit einer einzelnen Ziffer überein.

Innerhalb eines Klammerausdrucks besteht ein Bereichsausdruck aus zwei Zeichen, die durch einen Bindestrich ("-") getrennt sind. Es stimmt mit jedem einzelnen Zeichen überein, das zwischen den beiden Zeichen einschließlich einschließlich sortiert, wobei die Sortierfolge und der Zeichensatz des Gebietsschemas verwendet werden. Im Standard-Gebietsschema C entspricht [ad] beispielsweise [abcd]. Viele Gebietsschemas sortieren Zeichen in Wörterbuchreihenfolge, und in diesen Gebietsschemas entspricht [ad] normalerweise nicht [abcd]. Dies könnte beispielsweise [aBbCcDd] entsprechen. Um die traditionelle Interpretation von Klammerausdrücken zu erhalten, können Sie das Gebietsschema C verwenden, indem Sie die Umgebungsvariable LC_ALL auf den Wert C setzen.

Schließlich werden bestimmte benannte Zeichenklassen wie folgt in Klammerausdrücken vordefiniert. Ihre Namen sind selbsterklärend und sie sind [: alnum:], [: alpha:], [: cntrl:], [: digit:], [: graph:], [: lower:], [: print:] , [: punct:], [: space:], [: upper:] und [: xdigit:]. Zum Beispiel bedeutet [[: alnum:]] [0-9A-Za-z], außer dass die letztere Form vom C-Gebietsschema und der ASCII-Zeichenkodierung abhängt, während die erstere unabhängig von Gebietsschema und Zeichensatz ist. (Beachten Sie, dass die Klammern in diesen Klassennamen Teil der symbolischen Namen sind und zusätzlich zu den Klammern, die die Klammerliste begrenzen, enthalten sein müssen.) Die meisten Metazeichen verlieren ihre besondere Bedeutung in Listen. Um ein Literal einzuschließen, platzieren Sie es zuerst in der Liste. Um ein Literal einzuschließen, platzieren Sie es an einer anderen Stelle als zuerst. Um ein Literal einzuschließen, platzieren Sie es zuletzt.

Die Periode . entspricht einem einzelnen Zeichen. Das Symbol w ist ein Synonym für [[: alnum:]] und W ist ein Synonym für [^ [: alnum]].

Das Caret ^ und das Dollarzeichen ("$") sind Metazeichen, die jeweils mit der leeren Zeichenfolge am Anfang und Ende einer Zeile übereinstimmen. Die Symbole <und > stimmen jeweils mit der leeren Zeichenfolge am Anfang und Ende eines Wortes überein. Das Symbol b stimmt mit der leeren Zeichenfolge am Rand eines Wortes überein, und B stimmt mit der leeren Zeichenfolge überein, sofern sie nicht am Rand eines Wortes liegt.

Auf einen regulären Ausdruck kann einer von mehreren Wiederholungsoperatoren folgen:

? 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 oder mehrmals abgeglichen.
{n, m} Das vorhergehende Element wird mindestens n-mal, jedoch nicht mehr als m-mal abgeglichen.

Zwei reguläre Ausdrücke können verkettet werden. Der resultierende reguläre Ausdruck stimmt mit jeder Zeichenfolge überein, die durch Verketten von zwei Teilzeichenfolgen gebildet wird, die jeweils mit den verketteten Unterausdrücken übereinstimmen.

Der Infix-Operator | kann zwei reguläre Ausdrücke verbinden. Der resultierende reguläre Ausdruck stimmt mit jeder Zeichenfolge überein, die mit einem der beiden Unterausdrücke übereinstimmt.

Die Wiederholung hat Vorrang vor der Verkettung, die wiederum Vorrang vor der Abwechslung hat. Ein ganzer Unterausdruck kann in Klammern eingeschlossen werden, um diese Vorrangregeln zu überschreiben.

Die Rückreferenz n, wobei n eine einzelne Ziffer ist, stimmt mit der Teilzeichenfolge überein, die zuvor durch den n-ten in Klammern gesetzten Unterausdruck des regulären Ausdrucks abgeglichen wurde.

In regulären Grundausdrücken verlieren die Metazeichen ?, +, {, |, (Und) ihre besondere Bedeutung; Verwenden Sie stattdessen die Backslashed-Versionen ?, +, {, |, (und ).

Herkömmliches egrep unterstützte das {metacharacter nicht, und einige egrep-Implementierungen unterstützen stattdessen {, sodass portable Skripte {in egrep-Mustern vermeiden und [{] verwenden sollten, um mit einem Literal {übereinzustimmen.

GNU egrep versucht, die traditionelle Verwendung zu unterstützen, indem angenommen wird, dass {nichts Besonderes ist, wenn dies der Beginn einer ungültigen Intervallspezifikation wäre. Beispielsweise sucht der Shell-Befehl egrep '{1' nach der zweistelligen Zeichenfolge {1, anstatt einen Syntaxfehler im regulären Ausdruck zu melden. POSIX.2 erlaubt dieses Verhalten als Erweiterung, aber tragbare Skripte sollten es vermeiden.


Umgebungsvariablen

Das Verhalten von Grep wird von folgenden Umgebungsvariablen beeinflusst:

Ein Gebietsschema LC_foo wird angegeben, indem die drei Umgebungsvariablen LC_ALL, LC_foo, LANG in dieser Reihenfolge untersucht werden. Die erste dieser Variablen, die festgelegt wird, gibt das Gebietsschema an. Wenn beispielsweise LC_ALL nicht festgelegt ist, LC_MESSAGES jedoch auf pt_BR festgelegt ist, wird brasilianisches Portugiesisch für das Gebietsschema LC_MESSAGES verwendet. Das Gebietsschema C wird verwendet, wenn keine dieser Umgebungsvariablen festgelegt ist oder wenn der Gebietsschemakatalog nicht installiert ist oder wenn grep nicht mit Unterstützung der Landessprache (NLS) kompiliert wurde.

GREP_OPTIONS

Diese Variable gibt Standardoptionen an, die vor expliziten Optionen platziert werden sollen. Wenn GREP_OPTIONS beispielsweise '--binary-files = without-match --directories = skip' lautet, verhält sich grep so, als ob die beiden Optionen --binary-files = without-match und --directories = skip zuvor angegeben worden wären explizite Optionen. Optionsspezifikationen werden durch Leerzeichen getrennt. Ein Backslash entgeht dem nächsten Zeichen, sodass eine Option mit Leerzeichen oder Backslash angegeben werden kann.

GREP_COLOR

Gibt die Markierung zum Hervorheben an.

LC_ALL, LC_COLLATE, LANG

Diese Variablen geben das Gebietsschema LC_COLLATE an, das die Sortierfolge bestimmt, die zur Interpretation von Bereichsausdrücken wie [az] verwendet wird.

LC_ALL, LC_CTYPE, LANG

Diese Variablen geben das Gebietsschema LC_CTYPE an, das den Zeichentyp bestimmt, z. B. welche Zeichen Leerzeichen sind.

LC_ALL, LC_MESSAGES, LANG

Diese Variablen geben das Gebietsschema LC_MESSAGES an, das die Sprache bestimmt, die grep für Nachrichten verwendet. Das Standardgebietsschema C verwendet Nachrichten in amerikanischem Englisch.

POSIXLY_CORRECT

Wenn gesetzt, verhält sich grep so, wie es POSIX.2 erfordert. Ansonsten verhält sich grep eher wie andere GNU-Programme. Für POSIX.2 müssen Optionen, die auf Dateinamen folgen, als Dateinamen behandelt werden. Standardmäßig werden solche Optionen an die Spitze der Operandenliste gesetzt und als Optionen behandelt. Außerdem verlangt POSIX.2, dass nicht erkannte Optionen als "illegal" diagnostiziert werden. Da sie jedoch nicht wirklich gegen das Gesetz verstoßen, werden sie standardmäßig als "ungültig" diagnostiziert. POSIXLY_CORRECT deaktiviert auch _N_GNU_nonoption_argv_flags_, wie unten beschrieben.

_N_GNU_nonoption_argv_flags_

(Hier ist N die numerische Prozess-ID von grep.) Wenn das i-te Zeichen des Werts dieser Umgebungsvariablen 1 ist, betrachten Sie den i-ten Operanden von grep nicht als Option, selbst wenn er eine zu sein scheint. Eine Shell kann diese Variable für jeden ausgeführten Befehl in die Umgebung einfügen und dabei angeben, welche Operanden das Ergebnis der Platzhaltererweiterung für Dateinamen sind und daher nicht als Optionen behandelt werden sollten. Dieses Verhalten ist nur in der GNU C-Bibliothek verfügbar und nur, wenn POSIXLY_CORRECT nicht festgelegt ist.

Beispiele

egrep "support | help | windows" myfile.txt

Suchen Sie in der Datei myfile.txt nach Unterstützungsmustern und Fenstern.

egrep '^ [a-zA-Z] + $' myfile.txt

Ordnen Sie alle Zeilen in myfile.txt, die eine Zeile beginnen, einem alphabetischen Wort zu, das auch die Zeile beendet.

egrep -c '^ begin | end $' myfile.txt

Zählen Sie die Anzahl der Zeilen in myfile.txt, die mit dem Wort 'begin' beginnen oder mit dem Wort 'end' enden.

Verwandte Befehle

fgrep - Filtertext, der mit einer Zeichenfolge mit festem Zeichen übereinstimmt.grep - Filtertext, der mit einem regulären Ausdruck übereinstimmt.sed - Ein Dienstprogramm zum Filtern und Transformieren von text.sh - Der Bourne-Shell-Befehlsinterpreter.

Schreibe einen Kommentar