Geekflare wird von unserem Publikum unterstützt. Es kann sein, dass wir durch den Kauf von Links auf dieser Seite Affiliate-Provisionen verdienen.
Unter Linux Zuletzt aktualisiert: September 23, 2023
Weitergeben:
Invicti Web Application Security Scanner - die einzige Lösung, die eine automatische Überprüfung von Schwachstellen mit Proof-Based Scanning™ ermöglicht.

Wenn Sie schon eine Weile mit Linux arbeiten, kennen Sie bereits grep — Global Regular Expression Print, ein Textverarbeitungsprogramm, mit dem Sie Dateien und Verzeichnisse durchsuchen können. In den Händen eines Linux-Power-Users ist es sehr nützlich. Wenn Sie es jedoch ohne Regex verwenden, können seine Möglichkeiten eingeschränkt sein.

Aber was ist Regex?

Regex sind reguläre Ausdrücke, die Sie verwenden können, um die Suchfunktion von grep zu verbessern. Regex ist per Definition ein fortschrittliches Muster zum Filtern der Ausgabe. Mit etwas Übung können Sie Regex effektiv einsetzen, denn Sie können es auch mit anderen Linux-Befehlen verwenden.

In unserem Tutorial lernen Sie, wie Sie Grep und Regex effektiv nutzen können.

Vorraussetzung

Die Verwendung von grep mit regex erfordert gute Linux-Kenntnisse. Wenn Sie Anfänger sind, schauen Sie sich unsere Linux-Anleitungen an.

Außerdem benötigen Sie Zugang zu einem Laptop oder Computer mit einem Linux-Betriebssystem. Sie können jede Linux-Distribution Ihrer Wahl verwenden. Und wenn Sie einen Windows-Rechner haben, können Sie trotzdem Linux mit WSL2 verwenden. Lesen Sie unsere ausführliche Stellungnahme dazu hier.

Der Zugang zur Kommandozeile/zum Terminal ermöglicht es Ihnen, alle Befehle auszuführen, die in unserem grep/regex-Tutorial beschrieben sind.

Darüber hinaus benötigen Sie auch Zugang zu einer Textdatei, die Sie für die Ausführung der Beispiele benötigen. Ich habe ChatGPT verwendet, um eine Wand aus Text zu erzeugen und ihm zu sagen, dass er über Technik schreiben soll. Die Aufforderung, die ich verwendet habe, lautet wie folgt.

“Generieren Sie 400 Wörter über Technik. Er sollte die meisten technischen Themen enthalten. Achten Sie außerdem darauf, dass Sie die Namen der Technologien im Text wiederholen.”

Sobald der Text erstellt war, habe ich ihn kopiert und in der Datei tech.txt gespeichert, die wir im Laufe des Tutorials verwenden werden.

Und schließlich ist ein grundlegendes Verständnis des grep-Befehls ein Muss. Sie können sich 16 Beispiele für den Befehl grep ansehen, um Ihr Wissen aufzufrischen. Außerdem stellen wir Ihnen den Befehl grep kurz vor, um Ihnen den Einstieg zu erleichtern.

Syntax und Beispiele für den Befehl grep

Die Syntax des Befehls grep ist einfach.

$ grep -options [regex/pattern] [files]

Wie Sie sehen können, erwartet der Befehl ein Muster und die Liste der Dateien, die Sie ausführen möchten.

Es gibt eine Vielzahl von grep-Optionen, die die Funktionalität des Befehls verändern. Dazu gehören:

  • i: Fälle ignorieren
  • r: eine rekursive Suche durchführen
  • w : eine Suche durchführen, die nur ganze Wörter findet
  • v: alle nicht übereinstimmenden Zeilen anzeigen
  • n: alle übereinstimmenden Zeilennummern anzeigen
  • l : Druckt die Dateinamen
  • -color: farbige Ergebnisausgabe
  • c: zeigt die Anzahl der Übereinstimmungen für das verwendete Muster an

#1. Suche nach einem ganzen Wort

Für die Suche nach einem ganzen Wort müssen Sie das Argument -w mit grep verwenden. Damit umgehen Sie alle Zeichenfolgen, die mit dem angegebenen Muster übereinstimmen.

$ grep -w 'tech\|5G' tech.txt
grep -w arguemnt

Wie Sie sehen, führt der Befehl zu einer Ausgabe, in der er im gesamten Text nach zwei Wörtern, “5G” und “tech”, sucht. Anschließend werden sie mit roter Farbe markiert.

Hier wird das | Pipe-Symbol escaped, damit grep es nicht als Metazeichen verarbeitet.

Um eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung durchzuführen, verwenden Sie grep mit dem Argument -i .

$ grep -i 'tech' tech.txt
grep -i argument

Der Befehl sucht nach jeder Instanz der Zeichenkette “tech”, unabhängig von der Groß- und Kleinschreibung, egal ob es sich um ein ganzes Wort oder einen Teil davon handelt.

Um alle Zeilen anzuzeigen, die ein bestimmtes Muster nicht enthalten, müssen Sie das Argument -v verwenden.

$ grep -v 'tech' tech.txt
grep -v argument

Die Ausgabe zeigt alle Zeilen an, in denen das Wort“tech” nicht vorkommt Außerdem sehen Sie auch leere Zeilen. Diese Zeilen sind die Zeilen, die nach einem Absatz stehen.

Um eine rekursive Suche durchzuführen, verwenden Sie das Argument -r mit grep.

$ grep -R 'error\|warning' /var/log/*.log
#output

/var/log/bootstrap.log:2023-01-03 21:40:18 URL:http://ftpmaster.internal/ubuntu/pool/main/libg/libgpg-error/libgpg-erro 0_1.43-3_amd64.deb [69684/69684] -> "/build/chroot//var/cache/apt/archives/partial/libgpg-error0_1.43-3_amd64.deb" [1]

/var/log/bootstrap.log:dpkg: warning: parsing file '/var/lib/dpkg/status' near line 5 package 'dpkg':

/var/log/bootstrap.log:dpkg: warning: parsing file '/var/lib/dpkg/status' near line 5 package 'dpkg':

/var/log/bootstrap.log:dpkg: warning: parsing file '/var/lib/dpkg/status' near line 24 package 'dpkg':

/var/log/bootstrap.log:dpkg: warning: parsing file '/var/lib/dpkg/status' near line 24 package 'dpkg':

/var/log/bootstrap.log:dpkg: warning: ignoring pre-dependency problem!
grep recursive search log files

Der Befehl grep sucht rekursiv nach zwei Wörtern, “error” und “warning”, im Verzeichnis /var/log. Dies ist ein praktischer Befehl, um sich über alle Warnungen und Fehler in den Protokolldateien zu informieren.

Grep und Regex: Was es ist und Beispiele

Da wir mit regex arbeiten, müssen Sie wissen, dass regex drei Syntaxoptionen bietet. Dazu gehören:

  • Einfache reguläre Ausdrücke (BRE)
  • Erweiterte reguläre Ausdrücke (ERE)
  • Pearl-kompatible reguläre Ausdrücke (PCRE)

Der Befehl grep verwendet BRE als Standardoption. Wenn Sie also andere Regex-Modi verwenden möchten, müssen Sie diese angeben. Der Befehl grep behandelt auch Metazeichen so, wie sie sind. Wenn Sie also Metazeichen wie ?, , ) verwenden, müssen Sie diese mit dem Befehl backslash (\) ausschließen.

Die Syntax von grep mit regex lautet wie folgt.

$ grep [regex] [Dateinamen]

Lassen Sie uns grep und regex anhand der folgenden Beispiele in Aktion sehen.

#1. Wörtliche Wortübereinstimmungen

Für eine wörtliche Wortübereinstimmung müssen Sie eine Zeichenkette als regex angeben. Schließlich ist ein Wort auch ein Regex.

$ grep "technologien" tech.txt
literal word matches grep regex

Auf ähnliche Weise können Sie auch wörtliche Übereinstimmungen verwenden, um aktuelle Benutzer zu finden. Führen Sie dazu aus,

$ grep bash /etc/passwd
#Ausgabe

root:x:0:0:root:/root:/bin/bash

nitt:x:1000:1000:,,,:/home/nitt:/bin/bash
grep regex bash current users

Dies zeigt die Benutzer an, die auf die Bash zugreifen können.

#2. Anker-Übereinstimmung

Die Ankerübereinstimmung ist eine nützliche Technik für erweiterte Suchen mit Sonderzeichen. In regex gibt es verschiedene Ankerzeichen, die Sie verwenden können, um bestimmte Positionen innerhalb eines Textes darzustellen. Dazu gehören:

  • ‘^’ Caret-Symbol: Das Caret-Symbol entspricht dem Anfang der Eingabezeichenfolge oder -zeile und sucht nach einer leeren Zeichenfolge.
  • ‘$’ Dollar-Symbol: Das Dollar-Symbol entspricht dem Ende der Eingabezeichenfolge oder -zeile und sucht nach einer leeren Zeichenfolge.

Zu den beiden anderen Ankerzeichen gehören die Wortgrenze ‘\ b’ und die Nicht-Wortgrenze ‘\ B’.

  • ‘\ b’ Wortgrenze: Mit \b können Sie die Position zwischen einem Wort und einem Nicht-Wort-Zeichen bestimmen. In einfachen Worten: Sie können damit komplette Wörter abgleichen. Auf diese Weise können Sie partielle Übereinstimmungen vermeiden. Sie können es auch verwenden, um Wörter zu ersetzen oder das Vorkommen von Wörtern in einer Zeichenfolge zu zählen.
  • \B Nicht-Wort-Grenze: Sie ist das Gegenteil der \b Wort-Grenze in Regex, da sie eine Position behauptet, die nicht zwischen zwei Wort- oder Nicht-Wort-Zeichen liegt.

Gehen wir die Beispiele durch, um eine klare Vorstellung zu bekommen.

$ grep '^From' tech.txt
grep caret anchor

Die Verwendung von caret erfordert die Eingabe des Wortes oder Musters in der richtigen Groß- und Kleinschreibung. Das liegt daran, dass die Groß- und Kleinschreibung beachtet wird. Wenn Sie also den folgenden Befehl ausführen, wird er nichts zurückgeben.

$ grep '^from' tech.txt

Auf ähnliche Weise können Sie das Symbol $ verwenden, um den Satz zu finden, der mit einem bestimmten Muster, einer Zeichenkette oder einem Wort übereinstimmt.

$ grep 'technologie.$' tech.txt
grep dollar anchor

Sie können die beiden Symbole ^ und $ auch kombinieren. Sehen wir uns das folgende Beispiel an.

$ grep "^Von \|Technologie.$" tech.txt
grep caret dollar

Wie Sie sehen können, enthält die Ausgabe Sätze, die mit “From” beginnen und Sätze, die mit “technology” enden

#3. Gruppieren

Wenn Sie mehrere Muster auf einmal durchsuchen möchten, müssen Sie die Gruppierung verwenden. Damit können Sie kleine Gruppen von Zeichen und Mustern erstellen, die Sie als eine Einheit behandeln können. Sie können zum Beispiel eine Gruppe (tech) erstellen, die die Begriffe ‘t’, ‘e’, ‘c’ und ‘h’ enthält

Um eine klare Vorstellung zu bekommen, sehen wir uns ein Beispiel an.

$ grep 'technol\(ogy\)\?' tech.txt
grep grouping example

Mit der Gruppierung können Sie wiederholte Muster abgleichen, Gruppen erfassen und nach Alternativen suchen.

Alternativsuche mit Gruppierung

Sehen wir uns ein Beispiel für eine alternative Suche an.

$ grep "\(tech\|technology\)" tech.txt
grep alternative search

Wenn Sie eine Suche nach einer Zeichenkette durchführen möchten, müssen Sie diese mit dem Pipe-Symbol übergeben. Lassen Sie uns das im folgenden Beispiel sehen.

$ echo "tech technologische Technologien technische" | grep "\(tech\|technology\)"
#Ausgabe

"tech technologisch Technologien technisch"
grep searching string

Erfassende Gruppen, nicht-erfassende Gruppen und wiederholte Patterns

Und was ist mit erfassenden und nicht-erfassenden Gruppen?

Sie müssen eine Gruppe in der Regex erstellen und diese an den String oder eine Datei für die Erfassung von Gruppen übergeben.

$ echo 'tech655 tech655nical technologies655 tech655-oriented 655' | grep "\(tech\)\(655\)"
#Ausgabe

tech655 tech655nische Technologien655 tech655-orientierte 655
grep capturing groups

Und für nicht-erfassende Gruppen müssen Sie das ?: innerhalb der Klammern verwenden.

Und schließlich haben wir wiederholte Muster. Sie müssen die Regex ändern, um nach wiederholten Mustern zu suchen.

$ echo 'teach tech ttrial tttechno attest' | grep '\(t\ \)'
#Ausgabe

'teach tech ttrial tttechno attest'

Hier sucht die Regex nach einer oder mehreren Instanzen des Zeichens ‘t’.

#4. Zeichenklassen

Mit Zeichenklassen können Sie ganz einfach Regex-Ausdrücke schreiben. Diese Zeichenklassen verwenden eckige Klammern. Einige der bekannten Zeichenklassen sind:

  • [:digit:] – 0 bis 9 Ziffern
  • [:alpha:] – alphabetische Zeichen
  • [:alnum:] – alphanumerische Zeichen
  • [:lower:] – Kleinbuchstaben
  • [:upper:] – Großbuchstaben
  • [:xdigit:] – hexadezimale Ziffern, einschließlich 0-9, A-F, a-f
  • [:blank:] – Leerzeichen wie Tabulator oder Leerzeichen

Und so weiter!

Lassen Sie uns ein paar davon in Aktion sehen.

$ grep [[:Ziffer]] tech.txt
grep digit character class example
$ grep [[:alpha:]] tech.txt
grep alphabetic character class example
$ grep [[:xdigit:]] tech.txt
grep xdigit character class example

#5. Quantifizierer

Quantifizierer sind Metazeichen und bilden den Kern von regex. Mit ihnen können Sie exakte Erscheinungen abgleichen. Schauen wir sie uns im Folgenden an.

  • * → Null oder mehr Übereinstimmungen
  • → eine oder mehrere Übereinstimmungen
  • ? → Null oder eine Übereinstimmung
  • {x} → x Übereinstimmungen
  • {x, } → x oder mehr Übereinstimmungen
  • {x,z} → von x bis z Übereinstimmungen
  • {, z} → bis zu z Übereinstimmungen
$ echo 'teach tech ttrial tttechno attest' | grep -E 't '
#Ausgabe

'teach tech ttrial tttechno attest'

Hier wird nach den Instanzen des Zeichens‘t’ nach einer oder mehreren Übereinstimmungen gesucht. Dabei steht -E für eine erweiterte Regex (die wir später noch besprechen werden.)

quantifiers grep

#6. Erweiterte Regex

Wenn Sie keine Escape-Zeichen in das Regex-Muster einfügen möchten, müssen Sie Extended Regex verwenden. Damit entfällt die Notwendigkeit, Escape-Zeichen hinzuzufügen. Dazu müssen Sie das Flag -E verwenden.

$ grep -E 'in ovation' tech.txt
extended regex

#7. Verwendung von PCRE für komplexe Suchvorgänge

Mit PCRE (Perl Compatible Regular Expression) können Sie viel mehr tun als nur einfache Ausdrücke zu schreiben. Sie können zum Beispiel “\d” schreiben, was [0-9] bedeutet.

Sie können PCRE zum Beispiel verwenden, um nach E-Mail-Adressen zu suchen.

echo "Kontaktieren Sie mich unter nitish@newdomain.com" | grep -P "\b[A-Za-z0-9._% -] @[A-Za-z0-9.-] \.[A-Za-z]{2,}\b"
#output

Kontaktieren Sie mich unter nitish@newdomain.com
PCRE Email example

Hier stellt PCRE sicher, dass das Muster übereinstimmt. Auf ähnliche Weise können Sie auch ein PCRE-Muster verwenden, um nach Datumsmustern zu suchen.

$ echo "Die Sparkain-Website wurde am 2023-07-29 gestartet" | grep -P "\b\d{4}-\d{2}-\d{2}\b"
#Ausgabe

Die Sparkain-Website wurde am 2023-07-29 gestartet
PCRE date

Der Befehl findet das Datum im Format JJJJ-MM-TT. Sie können ihn auch an andere Datumsformate anpassen.

#8. Abwechslung

Wenn Sie alternative Übereinstimmungen wünschen, können Sie die escapeten Pipe-Zeichen (\|) verwenden.

$ grep -L 'warning\|error' /var/log/*.log
#output

/var/log/alternatives.log

/var/log/bootstrap.log

/var/log/dpkg.log

/var/log/fontconfig.log

/var/log/ubuntu-advantage.log

/var/log/upgrade-policy-changed.log

Die Ausgabe listet die Dateinamen auf, die “Warnung” oder “Fehler” enthalten

A screen shot of a log file.

Letzte Worte

Damit sind wir am Ende unserer grep und regex Anleitung angelangt. Sie können grep mit regex ausgiebig verwenden, um Ihre Suche zu verfeinern. Bei richtiger Anwendung können Sie viel Zeit sparen und viele Aufgaben automatisieren, insbesondere wenn Sie damit Skripte schreiben oder die regex bei der Suche im Text verwenden.

Als nächstes sehen Sie sich die häufig gestellten Fragen und Antworten zu Linux-Interviews an.

  • Nitish Singh
    Autor
Dank an unsere Sponsoren
Weitere gute Lektüre zu Linux
Energie für Ihr Unternehmen
Einige der Tools und Dienste, die Ihr Unternehmen beim Wachstum unterstützen.
  • Invicti nutzt das Proof-Based Scanning™, um die identifizierten Schwachstellen automatisch zu überprüfen und innerhalb weniger Stunden verwertbare Ergebnisse zu erzielen.
    Versuchen Sie Invicti
  • Web Scraping, Residential Proxy, Proxy Manager, Web Unlocker, Search Engine Crawler und alles, was Sie zum Sammeln von Webdaten benötigen.
    Versuchen Sie Brightdata
  • Monday.com ist ein All-in-One-Betriebssystem, mit dem Sie Projekte, Aufgaben, Arbeit, Vertrieb, CRM, Arbeitsabläufe und vieles mehr verwalten können.
    Versuch Montag
  • Intruder ist ein Online-Schwachstellen-Scanner, der Schwachstellen in Ihrer Infrastruktur aufspürt, um kostspielige Datenschutzverletzungen zu vermeiden.
    Versuchen Sie Intruder