Einführung
Das grep
Befehl (kurz für G lobales R zB E Ausdrücke P rint) ist ein leistungsstarkes Textverarbeitungstool zum Durchsuchen von Dateien und Verzeichnissen.
Wenn grep
wird mit regex kombiniert (Reg ular ex pressions), erweiterte Suche und Ausgabefilterung werden einfach. Systemadministratoren, Entwickler und normale Benutzer profitieren von der Beherrschung von Regex mit grep
Befehl.
In dieser Anleitung erfahren Sie, wie Sie grep
ausführen mit Regex durch Beispiele.
Voraussetzungen
- Zugriff auf das Terminal/die Befehlszeile.
- Eine Textdatei zum Durchsuchen. Die Beispiele verwenden die .bashrc Datei.
- Grundlegende grep-Befehlsverwendung.
Regulärer Ausdruck von Grep
Die Syntax für grep
Der Befehl enthält reguläre Ausdrücke im folgenden Format:
grep [regex] [file]
Reguläre Ausdrücke sind einfache Anweisungen, die beim Filtern von Daten und Dateien helfen. Viele Linux-Befehle, wie der awk-Befehl oder der sed-Befehl, verwenden ebenfalls reguläre Ausdrücke, um Informationen zu finden und zu manipulieren.
Zwei allgemeine Zeichentypen bilden eine Regex-Anweisung:
- Literale , bei denen es sich um Standardtextzeichen handelt.
- Spezial Zeichen oder Metazeichen haben eine besondere Bedeutung, es sei denn, sie werden mit einem Backslash maskiert (
\
).
Das grep
Der Befehl bietet drei Regex-Syntaxoptionen:
1. Grundlegender regulärer Ausdruck (BRE )
2. Erweiterte reguläre Ausdrücke (ERE )
3. Pearl-kompatible reguläre Ausdrücke (PCRE )
Standardmäßig grep
verwendet die BRE Syntax.
Grep-Regex-Beispiel
Führen Sie den folgenden Befehl aus, um zu testen, wie grep regex funktioniert:
grep if .bashrc
Die Regex sucht nach der Zeichenkette. Das Ergebnis zeigt alle Instanzen, in denen der Buchstabe i
gefolgt von einem f
erscheint in der .bashrc Datei. Daher hebt die Ausgabe die folgenden Ergebnisse hervor:
- wenn
- elwenn
- nichtwenn y
- identwenn liegen
Der Befehl gibt nur die Zeilen zurück, in denen es eine Übereinstimmung gibt.
Wie man Regex mit Grep verwendet
Regex bietet viele Möglichkeiten, Suchen mit grep
zu verfeinern . Nachfolgend finden Sie einige allgemeine Beispiele, die die grundlegende Syntax und Logik erläutern. Kombinieren Sie Übereinstimmungen, um komplexe Regex-Anweisungen zu erstellen.
Wörtliche Übereinstimmungen
Literale Übereinstimmungen führen eine exakte Übereinstimmung für die angegebene Zeichenfolge aus. Der vorherige Beispielausdruck für if
zeigt eine wörtliche Übereinstimmung.
Bei der Suche wird zwischen Groß- und Kleinschreibung unterschieden. Der folgende Befehl gibt andere Ergebnisse als im vorherigen Beispiel zurück:
grep If .bashrc
Um nach mehreren Wörtern zu suchen, fügen Sie Anführungszeichen hinzu:
grep "if the" .bashrc
Das Weglassen von Anführungszeichen behandelt das zweite Wort als Datei oder Speicherort.
Anker-Matches
Ankerübereinstimmungen geben die Zeilenposition in der Suche an. Es gibt zwei Ankertypen:
- Das Caret-Zeichen (
^
) sucht nach Übereinstimmungszeilen, die mit dem angegebenen Ausdruck beginnen. - Das Dollarzeichen (
$
) sucht nach Übereinstimmungszeilen, die mit dem angegebenen Literal enden.
Zum Beispiel, um Zeilen abzugleichen, die mit dem Wort alias
beginnen in der .bashrc Datei, verwenden Sie:
grep ^alias .bashrc
Die Suche zeigt keine Zeilen mit Tabulatoren oder Leerzeichen vor dem Wort an.
Zum Abgleichen von Zeilen, die mit dem Wort then
enden in der .bashrc Datei, führe aus:
grep then$ .bashrc
Verwenden Sie beide Anker, um eine Regex-Anweisung zu erstellen, die nach einem einzelnen Wort oder einer einzelnen Anweisung in einer Zeile sucht:
grep ^esac$ .bashrc
Verwenden Sie nur Anker, um leere Zeilen in einer Datei zu finden. Fügen Sie -n
hinzu Option zum Anzeigen von Zeilennummern in der Ausgabe:
grep -n ^$ .bashrc
Ohne -n
Option ist die Ausgabe leer.
Entspreche einem beliebigen Zeichen
Der Punkt (.
) Regex-Metazeichen passt auf ein beliebiges Zeichen anstelle des Vorzeichens. Zum Beispiel:
grep r.o .bashrc
Die Ausgabe zeigt alle Instanzen des Buchstabens r
, gefolgt von einem beliebigen Zeichen, gefolgt von o
. Der Punkt kann ein beliebiges Zeichen sein, z. B. ein Buchstabe, eine Zahl, ein Zeichen oder ein Leerzeichen.
Fügen Sie mehrere Punkte hinzu, um Platzhalter für mehrere Zeichen anzugeben:
grep r..t .bashrc
Kombinieren Sie es mit dem Anchor-Matching, um eine komplexe Regex-Anweisung zu erstellen. Zum Beispiel:
grep ..t$ .bashrc
Die Anweisung findet alle Zeilen mit zwei beliebigen Zeichen gefolgt vom Buchstaben t
am Ende.
Klammernausdrücke
Klammerausdrücke ermöglichen den Abgleich mehrerer Zeichen oder eines Zeichenbereichs an einer Position. Zum Beispiel, um alle Zeilen abzugleichen, die and
enthalten oder end
in der .bashrc Datei verwenden Sie das folgende Muster:
grep [ae]nd .bashrc
Klammerausdrücke ermöglichen das Ausschließen von Zeichen durch Hinzufügen des Caretzeichens (^
) Schild. Zum Beispiel, um alles außer and
abzugleichen oder end
, verwenden Sie:
grep [^ae]nd .bashrc
Verwenden Sie Klammerausdrücke, um einen Zeichenbereich anzugeben, indem Sie einen Bindestrich hinzufügen (-
) zwischen dem ersten und dem letzten Buchstaben. Suchen Sie beispielsweise nach allen Vorkommen von Großbuchstaben:
grep [A-Z] .bashrc
Kombinieren Sie Klammerausdrücke mit dem Anchor-Matching, um alle Wörter zu finden, die mit Großbuchstaben beginnen:
grep ^[A-Z] .bashrc
Klammerausdrücke lassen mehrere Bereiche zu. Vergleichen Sie beispielsweise alle Nicht-Buchstaben-Zeichen mit:
grep [^a-zA-Z] .bashrc
Die Ausgabe hebt Zahlen und Zeichen hervor und ignoriert alle Buchstaben.
Charakterklassen
Grep bietet Standard-Zeichenklassen als vordefinierte Funktionen an, um Klammerausdrücke zu vereinfachen. Unten ist eine Tabelle, die einige Klassen und das Äquivalent des Klammerausdrucks umreißt.
Syntax | Beschreibung | Äquivalent |
---|---|---|
[[:alnum:]] | Alle Buchstaben und Zahlen. | "[0-9a-zA-Z]" |
[[:alpha:]] | Alle Buchstaben. | "[a-zA-Z]" |
[[:blank:]] | Leerzeichen und Tabulatoren. | [CTRL+V<TAB> ] |
[[:digit:]] | Ziffern 0 bis 9. | [0-9] |
[[:lower:]] | Kleinbuchstaben. | [a-z] |
[[:punct:]] | Satzzeichen und andere Zeichen. | "[^a-zA-Z0-9]" |
[[:upper:]] | Großbuchstaben. | [A-Z] |
[[:xdigit:]] | Hexadezimalziffern. | "[0-9a-fA-F]" |
Die vollständige Liste der grep-Zeichenklassen finden Sie im grep-Handbuch.
Quantifizierer
Quantifizierer sind Metazeichen, die die Anzahl der Erscheinungen angeben. Die folgende Tabelle zeigt jede grep-Quantifizierer-Syntax mit einer kurzen Beschreibung.
Syntax | Beschreibung |
---|---|
* | Null oder mehr Übereinstimmungen. |
? | Null oder eine Übereinstimmung. |
+ | Eine oder mehrere Übereinstimmungen. |
{n} | n Übereinstimmungen. |
{n,} | n oder mehr Übereinstimmungen. |
{,m} | Bis zu m Übereinstimmungen. |
{n,m} | Von n bis zu m Übereinstimmungen. |
Der *
sign stimmt null oder mehrmals mit einem Muster überein. Führen Sie zur Demonstration den folgenden Befehl aus:
grep m*and .bashrc
In diesem Fall der *
Vorzeichen entspricht dem Buchstaben m
null oder mehrmals. Daher "and
, mand
, mmand
" sind alle Übereinstimmungen. Der Buchstabe m
wiederholt sich beliebig oft, wenn gefolgt von *
unterschreiben.
Um keine oder genau eine Übereinstimmung abzugleichen, verwenden Sie ?
Schild. Schließen Sie die Anweisung in einfache Anführungszeichen ein und maskieren Sie das Zeichen, um eine Interpretation zu vermeiden. Zum Beispiel:
grep 'm\?and' .bashrc
Verwenden Sie alternativ erweiterte reguläre Ausdrücke, um Escapezeichen zu vermeiden:
grep -E 'm?and' .bashrc
Die Ausgabe hebt alle Instanzen von and
hervor oder mand
.
Verwenden Sie Bereichsquantifizierer, um eine genaue Anzahl von Wiederholungen anzugeben. Suchen Sie beispielsweise nach Zeichenfolgen mit zwei Vokalen:
grep '[aeiouAEIOU]\{2\}' .bashrc
grep -E '[aeiouAEIOU]{2}' .bashrc
Die Ausgabe hebt alle Wörter mit zwei Vokalen hervor.
Alternative
Alternation ermöglicht die Definition alternativer Übereinstimmungen. Schließen Sie die alternativen Zeichenfolgen in einfache Anführungszeichen ein und trennen Sie sie jeweils durch ein Escape-Pipe-Zeichen (\|
).
Zum Beispiel, um nach den Wörtern bash
zu suchen oder alias
in der .bashrc Datei, verwenden Sie:
grep 'bash\|alias' .bashrc
Alternativ können Sie erweiterte Regex verwenden und das Escape-Zeichen weglassen:
grep -E 'bash|alias' .bashrc
Die Ausgabe hebt beide String-Instanzen in der Datei hervor.
Gruppierung
Reguläre Ausdrücke ermöglichen das Gruppieren von Mustern zu einem Element. Setzen Sie die Gruppe für reguläre Regex in Escape-Klammern oder verwenden Sie Extended.
Suchen Sie beispielsweise nach der Zeichenfolge bashrc
und machen Sie den rc
Zeichen optional:
grep 'bash\(rc\)\?' .bashrc
grep -E 'bash(rc)?' .bashrc
Die Ausgabe hebt alle Instanzen von bashrc
hervor . Seit rc
optional ist, passt der Befehl auch auf das Wort bash
.
Spezielle Backslash-Ausdrücke
Der Befehl grep bietet einige eindeutige Backslash-Ausdrücke für den erweiterten Wortgrenzenabgleich. Nachfolgend finden Sie eine Tabelle mit kurzen Beispielen für jeden Ausdruckstyp.
Syntax | Beispiel | Übereinstimmungen (Fettgedruckter Text steht für Übereinstimmungen) |
---|---|---|
\b | '\band\b' | und „und " \und \ |
\B | '\Band' | _und _und _ sund hund y |
\< | '\und | „und " und j und _ |
\> | 'and\>' | und "und" sund _und |
\w | '\wand' | _and _und _ Hand j Sand |
\W | '\Wand' | "und " /und / |
\s | '\sand' | |
\S | '\Sand' | _and "und " Sand Hand j _und _ /und / |
Verwenden Sie beispielsweise \b
Grenzen, um ein Wort zu finden, das nicht Teil eines anderen Wortes ist:
grep '\bse[et]\b' .bashrc
Der Ausdruck sucht nach Wörtern see
und set
. Die Grenze stellt die Wortisolierung sicher.
Escape-Metazeichen
Das Maskieren von Metazeichen behandelt Sonderzeichen als Literale. Um beispielsweise nach einem Punkt (.) am Ende einer Zeile zu suchen, maskieren Sie das Metazeichen:
grep '\.$' .bashrc
Zeicheninterpretation nicht zuzulassen hilft beim Durchsuchen von Quellcode oder Konfigurationsdateien.