Linux grep Befehl

grep Befehl

Unter Unix-ähnlichen Betriebssystemen verarbeitet der Befehl grep Text zeilenweise und druckt alle Zeilen, die einem bestimmten Muster entsprechen.

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


Syntax

grep [OPTIONEN] MUSTER [DATEI ...]

Überblick

Grep, das für "Global Regular Expression Print" steht, ist ein leistungsstarkes Tool zum Abgleichen eines regulären Ausdrucks mit Text in einer Datei, mehreren Dateien oder einem Eingabestream. Es sucht nach dem MUSTER des Textes, den Sie in der Befehlszeile angeben, und gibt die Ergebnisse für Sie aus.


Beispielanwendung

Angenommen, Sie möchten den Ausdruck "unsere Produkte" schnell in HTML-Dateien auf Ihrem Computer finden. Beginnen wir mit der Suche in einer einzelnen Datei. Hier ist unser MUSTER "unsere Produkte" und unsere DATEI ist product-listing.html.

Greppen einer einfachen Zeichenfolge mit einer einzelnen Datei als Eingabe

Es wurde eine einzelne Zeile mit unserem Muster gefunden, und grep gibt die gesamte übereinstimmende Zeile an das Terminal aus. Die Zeile ist länger als unsere Terminalbreite, sodass der Text in die folgenden Zeilen umgebrochen wird. Diese Ausgabe entspricht jedoch genau einer Zeile in unserer DATEI.

Hinweis: Das MUSTER wird von grep als regulärer Ausdruck interpretiert. Im obigen Beispiel werden alle von uns verwendeten Zeichen (Buchstaben und ein Leerzeichen) in regulären Ausdrücken wörtlich interpretiert, sodass nur die genaue Phrase übereinstimmt. Andere Zeichen haben jedoch spezielle Bedeutungen - zum Beispiel einige Satzzeichen. Weitere Informationen finden Sie in unserer Kurzreferenz für reguläre Ausdrücke.

Anzeigen der Grep-Ausgabe in Farbe

Wenn wir die Option --color verwenden, werden unsere erfolgreichen Übereinstimmungen für uns hervorgehoben:

Verwenden von grep mit der Option --color, um Übereinstimmungen hervorzuheben

Anzeigen der Zeilennummern erfolgreicher Übereinstimmungen

Es ist noch nützlicher, wenn wir wissen, wo die übereinstimmende Zeile in unserer Datei erscheint. Wenn wir die Option -n angeben, wird grep jeder übereinstimmenden Zeile die Zeilennummer voranstellen:

Verwenden von grep -n, um der Ausgabe Zeilennummern voranzustellen

Unserer übereinstimmenden Zeile wird "18:" vorangestellt, was uns sagt, dass dies Zeile 18 in unserer Datei entspricht.

Durchführen von Grep-Suchen ohne Berücksichtigung der Groß- und Kleinschreibung

Was ist, wenn "unsere Produkte" am Anfang eines Satzes oder in Großbuchstaben erscheinen? Wir können die Option -i angeben, um eine Übereinstimmung ohne Berücksichtigung der Groß- und Kleinschreibung durchzuführen:

Verwenden von grep -i, um eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung durchzuführen

Mit der Option -i findet grep auch in Zeile 23 eine Übereinstimmung.

Durchsuchen mehrerer Dateien mit einem Platzhalter

Wenn wir mehrere Dateien durchsuchen müssen, können wir sie alle mit einem Platzhalter in unserem Dateinamen durchsuchen. Anstatt product-listing.html anzugeben, können wir ein Sternchen ("*") und die Erweiterung .html verwenden. Wenn der Befehl ausgeführt wird, erweitert die Shell das Sternchen auf den Namen aller gefundenen Dateien (im aktuellen Verzeichnis), die mit ".html" enden.

Verwenden von grep zum Durchsuchen mehrerer Dateien mithilfe eines Platzhalters

Beachten Sie, dass jede Zeile mit der spezifischen Datei beginnt, in der diese Übereinstimmung auftritt.

Rekursive Suche nach Unterverzeichnissen

Mit der Option -r können wir unsere Suche auf Unterverzeichnisse und alle darin enthaltenen Dateien erweitern. Dadurch wird grep angewiesen, die Suche rekursiv durchzuführen. Ändern wir unseren Dateinamen in ein Sternchen ("*"), damit er mit jedem Datei- oder Verzeichnisnamen und nicht nur mit HTML-Dateien übereinstimmt:

Verwenden von grep -r zum rekursiven Durchsuchen von Unterverzeichnissen

Dies gibt uns drei zusätzliche Übereinstimmungen. Beachten Sie, dass der Verzeichnisname für alle übereinstimmenden Dateien enthalten ist, die sich nicht im aktuellen Verzeichnis befinden.

Verwenden regulärer Ausdrücke, um leistungsfähigere Suchvorgänge durchzuführen

Die wahre Stärke von grep ist, dass es verwendet werden kann, um reguläre Ausdrücke abzugleichen. (Dafür steht das "re" in "grep"). Reguläre Ausdrücke verwenden Sonderzeichen in der PATTERN-Zeichenfolge, um einem breiteren Array von Zeichenfolgen zu entsprechen. Schauen wir uns ein einfaches Beispiel an.

Angenommen, Sie möchten jedes Vorkommen einer Phrase, die "unseren Produkten" ähnelt, in Ihren HTML-Dateien finden, aber die Phrase sollte immer mit "unsere" beginnen und mit "Produkten" enden. Wir können stattdessen dieses MUSTER angeben: "unsere. * -Produkte".

In regulären Ausdrücken wird der Punkt (".") Als ein Platzhalter mit einem Zeichen interpretiert. Es bedeutet "jedes Zeichen, das an dieser Stelle erscheint, wird übereinstimmen." Das Sternchen ("*") bedeutet, dass "das vorhergehende Zeichen, das null oder mehrmals vorkommt, übereinstimmt". Die Kombination ". *" Entspricht also einer beliebigen Anzahl von Zeichen. Zum Beispiel werden "unsere erstaunlichen Produkte", "unsere, die besten Produkte aller Zeiten" und sogar "unsere Produkte" zusammenpassen. Und da wir die Option -i angeben, stimmen auch "UNSERE PRODUKTE" und "OuRpRoDuCtS" überein. Lassen Sie uns den Befehl mit diesem regulären Ausdruck ausführen und sehen, welche zusätzlichen Übereinstimmungen wir erhalten können:

Einbindung regulärer Ausdrücke in ein Grep-Suchmuster

Hier haben wir auch eine Übereinstimmung mit dem Satz "unsere feinen Produkte".

Grep ist ein leistungsstarkes Tool, mit dem Sie mit Textdateien arbeiten können. Es wird noch leistungsfähiger, wenn Sie sich mit regulären Ausdrücken vertraut machen.


Technische Beschreibung

grep durchsucht die benannten Eingabedateien (oder die Standardeingabe, wenn keine Dateien benannt sind oder wenn ein einzelner Bindestrich ("-") als Dateiname angegeben wird) nach Zeilen, die eine Übereinstimmung mit dem angegebenen MUSTER enthalten. Standardmäßig druckt grep die übereinstimmenden Zeilen.

Außerdem stehen drei Variantenprogramme egrep, fgrep und rgrep zur Verfügung:

  • egrep ist dasselbe wie grep -E auszuführen. In diesem Modus wertet grep Ihre PATTERN-Zeichenfolge als erweiterten regulären Ausdruck (ERE) aus. Heutzutage "geht" ERE nicht sehr weit über grundlegende reguläre Ausdrücke hinaus, aber sie können immer noch sehr nützlich sein. Weitere Informationen zu erweiterten regulären Ausdrücken finden Sie weiter unten unter Grundlegende oder erweiterte reguläre Ausdrücke.
  • fgrep ist dasselbe wie grep -F auszuführen. In diesem Modus wertet grep Ihre PATTERN-Zeichenfolge als "feste Zeichenfolge" aus - jedes Zeichen in Ihrer Zeichenfolge wird wörtlich behandelt. Wenn Ihre Zeichenfolge beispielsweise ein Sternchen ("*") enthält, versucht grep, es mit einem tatsächlichen Sternchen abzugleichen, anstatt dies als Platzhalter zu interpretieren. Wenn Ihre Zeichenfolge mehrere Zeilen enthält (wenn sie Zeilenumbrüche enthält), wird jede Zeile als feste Zeichenfolge betrachtet, und jede von ihnen kann eine Übereinstimmung auslösen.
  • rgrep ist dasselbe wie das Ausführen von grep -r. In diesem Modus führt grep seine Suche rekursiv durch. Wenn es auf ein Verzeichnis stößt, wird es in dieses Verzeichnis übergehen und die Suche fortsetzen. (Symbolische Links werden ignoriert. Wenn Sie symbolisch verknüpfte Verzeichnisse durchsuchen möchten, sollten Sie stattdessen die Option -R verwenden.)

In älteren Betriebssystemen waren egrep, fgrep und rgrep unterschiedliche Programme mit eigenen ausführbaren Dateien. In modernen Systemen sind diese speziellen Befehlsnamen Verknüpfungen, mit denen die entsprechenden Flags aktiviert werden können. Sie sind funktional gleichwertig.

Allgemeine Optionen

--help Drucken Sie eine Hilfemeldung aus, in der die Befehlszeilenoptionen kurz zusammengefasst sind, und beenden Sie das Programm.
-V, --version Drucken Sie die Versionsnummer von grep und beenden Sie das Programm.

Übereinstimmungsauswahloptionen

-E, --extended-regexp Interpretieren Sie PATTERN als erweiterten regulären Ausdruck (siehe Basic vs. Extended Regular Expressions).
-F, --fixed-Strings Interpretieren Sie PATTERN als eine Liste fester Zeichenfolgen, die durch Zeilenumbrüche getrennt sind und abgeglichen werden sollen.
-G, --basic-regexp Interpretieren Sie MUSTER als regulären Basisausdruck (siehe Basis- und erweiterte reguläre Ausdrücke). Dies ist die Standardoption beim Ausführen von grep.
-P, --perl-regexp Interpretieren Sie PATTERN als regulären Perl-Ausdruck. Diese Funktionalität ist noch experimentell und kann zu Warnmeldungen führen.

Übereinstimmende Steuerungsoptionen

-e MUSTER, --regexp = MUSTER Verwenden Sie PATTERN als passendes Muster. Dies kann verwendet werden, um mehrere Suchmuster anzugeben oder um ein Muster zu schützen, das mit einem Bindestrich (-) beginnt.
-f DATEI, --Datei = DATEI Erhalten Sie Muster aus DATEI, eines pro Zeile.
-i, --ignore-case Ignorieren Sie die Unterscheidung zwischen Groß- und Kleinschreibung sowohl im MUSTER als auch in den Eingabedateien.
-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. Oder es muss entweder am Ende der Zeile stehen oder von einem Nicht-Wort-Bestandteil gefolgt werden. Wortbestandteilszeichen sind Buchstaben, Ziffern und Unterstriche.
-x, --line-regexp Wählen Sie nur Übereinstimmungen aus, die genau mit der gesamten Zeile übereinstimmen.
-y Das gleiche wie -i.

Allgemeine Ausgabesteuerung

-c, --count Drucken Sie anstelle der normalen Ausgabe eine Anzahl übereinstimmender Zeilen für jede Eingabedatei. Zählen Sie mit der Option -v, --invert-match (siehe unten) nicht übereinstimmende Zeilen.
- Farbe [= WANN], - Farbe [= WANN] Umgeben Sie die übereinstimmenden (nicht leeren) Zeichenfolgen, übereinstimmenden Zeilen, Kontextzeilen, Dateinamen, Zeilennummern, Byte-Offsets und Trennzeichen (für Felder und Gruppen von Kontextzeilen) mit Escape-Sequenzen, um sie auf dem Terminal farbig anzuzeigen. Die Farben werden durch die Umgebungsvariable GREP_COLORS definiert. Die ältere Umgebungsvariable GREP_COLOR wird weiterhin unterstützt, ihre Einstellung hat jedoch keine Priorität. WANN ist nie, immer oder automatisch.
-L, --files-without-match Drucken Sie anstelle der normalen Ausgabe den Namen jeder Eingabedatei, aus der normalerweise keine Ausgabe gedruckt worden wäre. Der Scanvorgang wird beim ersten Spiel beendet.
-l, --Dateien mit Übereinstimmungen Drucken Sie anstelle der normalen Ausgabe den Namen jeder Eingabedatei, aus der die Ausgabe normalerweise 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.
-o, --nur passend Drucken Sie nur die übereinstimmenden (nicht leeren) Teile einer übereinstimmenden Zeile, wobei sich jeder dieser Teile in einer separaten Ausgabezeile befindet.
-q, --quiet, --silent Ruhig; 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.
-s, --no-Nachrichten Unterdrücken Sie Fehlermeldungen zu nicht vorhandenen oder nicht lesbaren Dateien.

Ausgangszeilen-Präfixsteuerung

-b, --byte-offset Drucken Sie den 0-basierten Byte-Offset in der Eingabedatei vor jeder Ausgabezeile. Wenn -o (--nur übereinstimmend) angegeben ist, drucken Sie den Versatz des übereinstimmenden Teils selbst.
-H, --mit Dateiname Drucken Sie den Dateinamen für jede Übereinstimmung. Dies ist die Standardeinstellung, wenn mehr als eine Datei durchsucht werden muss.
-h, --no-Dateiname Unterdrücken Sie das Präfix von Dateinamen bei der Ausgabe. Dies ist die Standardeinstellung, wenn nur eine Datei (oder nur eine Standardeingabe) durchsucht werden soll.
--label = LABEL Anzeige der Eingabe, die tatsächlich von der Standardeingabe stammt, als Eingabe, die aus der Datei LABEL stammt. Dies ist besonders nützlich, wenn Sie Tools wie zgrep implementieren, z. B. gzip -cd foo.gz | grep --label = foo -H etwas. Siehe auch die Option -H.
-n, - Zeilennummer Stellen Sie jeder Ausgabezeile die 1-basierte Zeilennummer in der Eingabedatei voran.
-T, --initial-tab Stellen Sie sicher, dass das erste Zeichen des tatsächlichen Zeileninhalts auf einem Tabulator liegt, damit die Ausrichtung der Tabulatoren normal aussieht. Dies ist nützlich bei Optionen, die ihre Ausgabe dem tatsächlichen Inhalt voranstellen: -H, -n und -b. Um die Wahrscheinlichkeit zu verbessern, dass Zeilen aus einer einzelnen Datei alle in derselben Spalte beginnen, werden auch die Zeilennummer und der Byte-Offset (falls vorhanden) in einer Feldbreite mit minimaler Größe gedruckt.
-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.
-Z, --null Geben Sie ein Null-Byte (das ASCII-NUL-Zeichen) anstelle des Zeichens aus, das normalerweise einem Dateinamen folgt. 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.

Kontextzeilensteuerung

-A NUM, --after-context = NUM Drucken Sie NUM-Zeilen des nachfolgenden Kontexts nach dem Abgleichen der Zeilen. Platziert eine Zeile mit einem Gruppentrennzeichen (-) zwischen zusammenhängenden Gruppen von Übereinstimmungen. Mit der Option -o oder --only-matching hat dies keine Auswirkung und es wird eine Warnung ausgegeben.
-B NUM, --before-context = NUM Drucken Sie NUM-Zeilen des führenden Kontexts, bevor Sie die Zeilen abgleichen. Platziert eine Zeile mit einem Gruppentrennzeichen (-) zwischen zusammenhängenden Gruppen von Übereinstimmungen. Mit der Option -o oder --only-matching hat dies keine Auswirkung und es wird eine Warnung ausgegeben.
-C NUM, -NUM, --context = NUM Drucken Sie NUM-Zeilen des Ausgabekontexts. Platziert eine Zeile mit einem Gruppentrennzeichen (-) zwischen zusammenhängenden Gruppen von Übereinstimmungen. Mit der Option -o oder --only-matching hat dies keine Auswirkung und es wird eine Warnung ausgegeben.

Datei- und Verzeichnisauswahl

-ein Text Verarbeiten Sie eine Binärdatei wie Text. Dies entspricht der Option --binary-files = text.
--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.
-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, dh Verzeichnisse werden so gelesen, als wären sie normale Dateien. Wenn ACTION übersprungen wird, überspringen Sie Verzeichnisse stillschweigend. Wenn ACTION rekursiv ist, lesen Sie alle Dateien unter jedem Verzeichnis rekursiv und folgen Sie symbolischen Links nur, wenn sie sich in der Befehlszeile befinden. Dies entspricht der Option -r.
--exclude = GLOB Überspringen Sie Dateien, deren Basisname mit GLOB übereinstimmt (mithilfe des Platzhalterabgleichs). Ein Dateiname Glob kann *,? Und [...] als Platzhalter und verwenden, um ein Platzhalter- oder Backslash-Zeichen wörtlich zu zitieren.
--exclude-from = FILE Überspringen Sie Dateien, deren Basisname mit einem der aus FILE gelesenen Dateinamen-Globs übereinstimmt (unter Verwendung des Platzhalterabgleichs, wie unter --exclude beschrieben).
--exclude-dir = DIR Schließen Sie Verzeichnisse, die dem Muster DIR entsprechen, von rekursiven Suchen aus.
-I Verarbeiten Sie eine Binärdatei so, als ob sie keine übereinstimmenden Daten enthält. Dies entspricht der Option --binary-files = without-match.
--include = GLOB Suchen Sie nur nach Dateien, deren Basisname mit GLOB übereinstimmt (verwenden Sie den Platzhalterabgleich wie unter --exclude beschrieben).
-r, - rekursiv Lesen Sie alle Dateien unter jedem Verzeichnis rekursiv und folgen Sie symbolischen Links nur, wenn sie sich in der Befehlszeile befinden. Dies entspricht der Option -d recurse.
-R, --dereference-rekursiv Lesen Sie alle Dateien unter jedem Verzeichnis rekursiv. Folgen Sie im Gegensatz zu -r allen symbolischen Links.

Andere Optionen

--line-gepuffert Verwenden Sie die Zeilenpufferung für die Ausgabe. Dies kann zu Leistungseinbußen führen.
--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.
-U, --binary Behandeln Sie die Datei (en) als binär. Standardmäßig errät grep unter MS-DOS und MS-Windows den Dateityp, indem der Inhalt der ersten 32 KB aus der Datei gelesen wird. 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.
-z, --null-data Behandeln Sie die Eingabe als eine Reihe von Zeilen, die jeweils durch ein Null-Byte (das ASCII-NUL-Zeichen) anstelle einer neuen Zeile abgeschlossen werden. 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 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 drei verschiedene Versionen der Syntax regulärer Ausdrücke: "basic" (BRE), "extended" (ERE) und "perl" (PRCE). In GNU grep gibt es keinen Unterschied in der verfügbaren Funktionalität zwischen einfacher und erweiterter Syntax. In anderen Implementierungen sind reguläre Grundausdrücke weniger leistungsfähig. Die folgende Beschreibung gilt für erweiterte reguläre Ausdrücke. Unterschiede für grundlegende reguläre Ausdrücke werden anschließend zusammengefasst. Perl reguläre Ausdrücke bieten zusätzliche Funktionen.

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.

Der Punkt (.) Entspricht einem einzelnen Zeichen.

Zeichenklassen und Klammerausdrücke

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:]. Beispielsweise bedeutet [[: alnum:]] die Zeichenklasse von Zahlen und Buchstaben im aktuellen Gebietsschema. In der Codierung des C-Gebietsschemas und des ASCII-Zeichensatzes entspricht dies [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 Metazeichen verlieren ihre besondere Bedeutung in Klammerausdrücken. 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.

Verankerung

Das Caret ^ und das Dollarzeichen $ sind Metazeichen, die jeweils mit der leeren Zeichenfolge am Anfang und Ende einer Zeile übereinstimmen.

Der Backslash-Charakter und spezielle Ausdrücke

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. Das Symbol w ist ein Synonym für [_ [: alnum:]] und W ist ein Synonym für [^ _ [: alnum:]].

Wiederholung

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.

Verkettung

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 Ausdrücken übereinstimmen.

Wechsel

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

Vorrang

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

Zurück Referenzen und Unterausdrücke

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.

Grundlegende oder erweiterte reguläre Ausdrücke

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

Herkömmliche Versionen von egrep unterstützten das {Meta-Zeichen nicht, und einige egrep-Implementierungen unterstützen stattdessen {, sodass portable Skripte {in grep-E-Mustern vermeiden und [{] verwenden sollten, um mit einem Literal {übereinzustimmen.

GNU grep -E 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 Befehl grep -E '{1' nach der zweistelligen Zeichenfolge {1, anstatt einen Syntaxfehler im regulären Ausdruck zu melden. POSIX erlaubt dieses Verhalten als Erweiterung, aber tragbare Skripte sollten es vermeiden.

Umgebungsvariablen

Das Verhalten von grep wird von den folgenden Umgebungsvariablen beeinflusst.

Das Gebietsschema für die Kategorie LC_foo wird angegeben, indem die drei Umgebungsvariablen LC_ALL, LC_foo und 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 das brasilianische portugiesische Gebietsschema für die Kategorie LC_MESSAGES verwendet. Das Gebietsschema C wird verwendet, wenn keine dieser Umgebungsvariablen festgelegt ist, wenn der Gebietsschemakatalog nicht installiert ist oder wenn grep nicht mit Unterstützung der Landessprache (NLS) kompiliert wurde.

Andere bemerkenswerte Variablen:

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 Diese Variable gibt die Farbe an, mit der übereinstimmender (nicht leerer) Text hervorgehoben wird. Es ist zugunsten von GREP_COLORS veraltet, wird aber weiterhin unterstützt. Die Funktionen mt, ms und mc von GREP_COLORS haben Vorrang vor diesen Funktionen. Es kann nur die Farbe angegeben werden, mit der der übereinstimmende nicht leere Text in einer übereinstimmenden Zeile hervorgehoben wird (eine ausgewählte Zeile, wenn die Befehlszeilenoption -v weggelassen wird, oder eine Kontextzeile, wenn -v angegeben ist). Der Standardwert ist 01; 31, was bedeutet, dass auf dem Standardhintergrund des Terminals ein fetter roter Vordergrundtext angezeigt wird.
GREP_COLORS Gibt die Farben und andere Attribute an, mit denen verschiedene Teile der Ausgabe hervorgehoben werden. Sein 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 mit rv und ne boolesche Fähigkeiten weggelassen (dh false). Folgende Funktionen werden unterstützt:

sl = SGR-Teilzeichenfolge für ganze ausgewählte Zeilen (dh ü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 stattdessen für kontextbezogene Zeilen. Der Standardwert ist leer (dh das Standardfarbpaar des Terminals).
cx = SGR-Teilzeichenfolge für ganze Kontextzeilen (dh 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 stattdessen für ausgewählte nicht übereinstimmende Zeilen. Der Standardwert ist leer (dh das Standardfarbpaar des Terminals).
rv Boolescher Wert, der die Bedeutungen der Funktionen sl = und cx = umkehrt (vertauscht), wenn die Befehlszeilenoption -v angegeben wird. Der Standardwert ist false (dh die Funktion wird weggelassen).
mt = 01; 31 SGR-Teilzeichenfolge zum Abgleichen von nicht leerem Text in einer übereinstimmenden Zeile (dh eine ausgewählte Zeile, wenn die Befehlszeilenoption -v weggelassen wird, oder eine Kontextzeile, wenn -v angegeben ist). Das Einstellen entspricht dem gleichzeitigen Einstellen von ms = und mc = auf denselben Wert. Die Standardeinstellung ist ein fetter roter Textvordergrund über dem aktuellen Zeilenhintergrund.
ms = 01; 31 SGR-Teilzeichenfolge zum Abgleichen von nicht leerem Text in einer ausgewählten Zeile. (Dies wird nur verwendet, wenn die Befehlszeilenoption -v weggelassen wird.) Der Effekt der Funktion sl = (oder cx = if rv) bleibt aktiv, wenn dies aktiviert wird. Die Standardeinstellung ist ein fetter roter Textvordergrund über der aktuellen Zeile Hintergrund.
mc = 01; 31 SGR-Teilzeichenfolge zum Abgleichen von nicht leerem Text in einer Kontextzeile. (Dies wird nur verwendet, wenn die Befehlszeilenoption -v angegeben ist.) Der Effekt der Funktion cx = (oder sl = if rv) bleibt aktiv, wenn dies aktiviert wird. Die Standardeinstellung ist ein fetter roter Textvordergrund über der aktuellen Zeile Hintergrund.
fn = 35 SGR-Teilzeichenfolge für Dateinamen, die einer Inhaltszeile vorangestellt sind. Die Standardeinstellung ist ein magentafarbener Textvordergrund über dem Standardhintergrund des Terminals.
ln = 32 SGR-Teilzeichenfolge für Zeilennummern, die einer Inhaltszeile vorangestellt sind. Die Standardeinstellung ist ein grüner Textvordergrund über dem Standardhintergrund des Terminals.
bn = 32 SGR-Teilzeichenfolge für Byte-Offsets, die einer Inhaltszeile vorangestellt sind. Die Standardeinstellung ist ein grüner Textvordergrund über dem Standardhintergrund des Terminals.
se = 36 SGR-Teilzeichenfolge für Trennzeichen, die zwischen ausgewählten Zeilenfeldern (:), zwischen Kontextzeilenfeldern (-) und zwischen Gruppen benachbarter Zeilen eingefügt werden, wenn ein Kontext ungleich Null angegeben ist (-). Die Standardeinstellung ist ein Cyan-Text-Vordergrund über dem Standardhintergrund des Terminals.
ne Boolescher Wert, der verhindert, dass bei jedem Ende eines kolorierten Elements das Löschen bis zum Zeilenende durch Löschen in Zeile (EL) nach rechts ( 33 [K) verhindert wird. Dies ist an Terminals erforderlich, an denen EL nicht unterstützt wird. Dies ist ansonsten auf Terminals nützlich, für die die boolesche Terminfo-Funktion back_color_erase (bce) nicht gilt, wenn die ausgewählten Hervorhebungsfarben den Hintergrund nicht beeinflussen oder wenn EL zu langsam ist oder zu viel Flimmern verursacht. Der Standardwert ist false (dh die Funktion wird weggelassen).

Beachten Sie, dass boolesche Funktionen keinen = ... Teil haben. Sie werden standardmäßig weggelassen (dh falsch) und werden bei Angabe wahr. Weitere Informationen finden Sie im Abschnitt Select Graphic Rendition (SGR) in der Dokumentation des Textterminals, das für zulässige Werte und deren Bedeutung als Zeichenattribute verwendet wird. Diese Teilzeichenfolgenwerte sind Ganzzahlen in Dezimaldarstellung und können mit Semikolons verkettet werden. grep sorgt dafür, dass das Ergebnis zu einer vollständigen SGR-Sequenz ( 33 [... m) zusammengesetzt wird. Zu den allgemeinen Werten für die Verkettung gehören 1 für Fettdruck, 4 für Unterstreichung, 5 für Blinken, 7 für Invers, 39 für Standard-Vordergrundfarbe, 30 bis 37 für Vordergrundfarben, 90 bis 97 für Vordergrundfarben im 16-Farben-Modus, 38; 5; 0 bis 38; 5; 255 für Vordergrundfarben im 88-Farben- und 256-Farben-Modus, 49 für die Standardhintergrundfarbe, 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 im 88-Farben- und 256-Farben-Modus.

LC_ALL, LC_COLLATE, LANG Diese Variablen geben das Gebietsschema für die Kategorie 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 für die Kategorie LC_CTYPE an, das den Typ der Zeichen bestimmt, z. B. welche Zeichen Leerzeichen sind.
LC_ALL, LC_MESSAGES, LANG Diese Variablen geben das Gebietsschema für die Kategorie 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 erfordert. Ansonsten verhält sich grep eher wie andere GNU-Programme. POSIX erfordert, dass 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, 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.

Status beenden

Der Exit-Status ist 0, wenn ausgewählte Zeilen gefunden werden, und 1, wenn sie nicht gefunden werden. Wenn ein Fehler aufgetreten ist, lautet der Exit-Status 2.

Beispiele

grep chope / etc / passwd

Suchen Sie in / etc / passwd nach Benutzer chope.

grep "31. Mai 03" / etc / httpd / logs / error_log

Durchsuchen Sie die Apache error_log-Datei nach Fehlern, die am 31. Mai um 3 Uhr morgens aufgetreten sind. Durch Hinzufügen von Anführungszeichen um die Zeichenfolge können Sie Leerzeichen in die grep-Suche einfügen.

grep -r "Computerhope" / www /

Durchsuchen Sie rekursiv das Verzeichnis / www / und alle Unterverzeichnisse nach Zeilen von Dateien, die die Zeichenfolge "Computerhope" enthalten.

grep -w "hoffe" myfile.txt

Durchsuchen Sie die Datei myfile.txt nach Zeilen mit dem Wort "Hoffnung". Es werden nur Zeilen abgeglichen, die das eindeutige Wort "Hoffnung" enthalten. Zeilen, in denen "Hoffnung" Teil eines Wortes ist, werden nicht übereinstimmen.

grep -cw "hoffe" myfile.txt

Entspricht dem vorherigen Befehl, zeigt jedoch die Anzahl der übereinstimmenden Zeilen an und nicht die übereinstimmenden Zeilen selbst.

grep -cvw "hoffe" myfile.txt

Umkehrung des vorherigen Befehls: Zeigt eine Anzahl der Zeilen in myfile.txt an, die nicht das Wort "Hoffnung" enthalten.

grep -l "Hoffnung" / www / *

Zeigen Sie die Dateinamen (aber nicht die übereinstimmenden Zeilen selbst) aller Dateien in / www / (aber nicht in den Unterverzeichnissen) an, deren Inhalt die Zeichenfolge "Hoffnung" enthält.

Verwandte Befehle

ed - Ein einfacher Texteditor.egrep - Filtertext, der einem erweiterten regulären Ausdruck entspricht.sed - Ein Dienstprogramm zum Filtern und Transformieren von text.sh - Der Bourne-Shell-Befehlsinterpreter.

#goog-gt-tt {display:none !important;}.goog-te-banner-frame {display:none !important;}.goog-te-menu-value:hover {text-decoration:none !important;}body {top:0 !important;}#gtranslate_element {display:none!important;}

var gt_not_translated_list = ["-V, --version","-E,","--extended-regexp","-G, --basic-regexp","-P, --perl-regexp","-i, --ignore-case","-v, --invert-match","-w, --word-regexp","-x, --line-regexp","-c, --count","-L, --files-without-match","-q, --quiet, --silent","-b, --byte-offset","-T, --initial-tab","-Z, --null","-A NUM,","-B NUM,","-C NUM, -NUM,","--mmap","-U, --binary","-z, --null-data","{n}","{n,}","GREP_OPTIONS","GREP_COLOR","GREP_COLORS","LC_ALL, LC_COLLATE, LANG","LC_ALL, LC_CTYPE, LANG","LC_ALL, LC_MESSAGES, LANG","POSIXLY_CORRECT","_N_GNU_nonoption_argv_flags_"];
document.cookie = "googtrans=/en/de; domain=.balogs.xyz";
document.cookie = "googtrans=/en/de";
function GTranslateElementInit() {new google.translate.TranslateElement({pageLanguage: 'en',layout: google.translate.TranslateElement.InlineLayout.SIMPLE,autoDisplay: false,multilanguagePage: true}, 'gtranslate_element');}

Schreibe einen Kommentar