GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Grep Regex:Ein vollständiger Leitfaden

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 \
und
und
\B '\Band' _und
_und _
sund
hund y
\< '\ und
und "
und j
und _
und
und
\> 'and\>' und
"und"
sund
_und
und
und
\w '\wand' _and
_und _
Hand j
Sand
\W '\Wand' "und "
/und /
\s '\sand' und
und
\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.


Linux
  1. Was ist Kubernetes? Vollständiger Leitfaden

  2. So installieren Sie Void Linux:Eine vollständige Schritt-für-Schritt-Anleitung

  3. Vollständiges Handbuch zur Verwendung von AsciiDoc unter Linux

  4. Der vollständige Leitfaden für Anfänger zu LVM unter Linux

  5. Regex (grep) für mehrzeilige Suche erforderlich

Eine vollständige Anleitung zur Installation von Tomcat unter Linux

Ubuntu Firewall UFW – Eine vollständige Anleitung

Die vollständige Anleitung zur Installation von MySQL auf Ubuntu

10 praktische Beispiele für Regex mit grep

Linux-Verzeichnisbefehle:Eine vollständige Anleitung

Cronjob - Der vollständige Leitfaden für Cronjobs