grep
100%

Text-Fu · Lektion 16

grep

Lerne, Zeilen mit festen Zeichenfolgen oder regulären Ausdrücken auszuwählen und grep-Ergebnisse zu deuten.

Der Befehl grep wählt Eingabezeilen aus, die zu einem Muster passen. Er kann benannte Dateien oder stdin durchsuchen, Kontext zu Treffern ausgeben, ausgewählte Zeilen zählen und über seinen Beendigungsstatus mitteilen, ob ein Treffer gefunden wurde.

Passende Zeilen in einer Datei finden

Übergib ein Muster, gefolgt von einer oder mehreren Eingabedateien:

$ grep 'fox' sample.txt

GNU grep interpretiert das Muster standardmäßig als einfachen regulären Ausdruck und gibt jede ausgewählte Zeile aus. Setze Muster in Anführungszeichen, damit Leerzeichen und Shell-Metazeichen nicht zuerst von der Shell interpretiert werden.

Verwende -F, wenn das Muster als feste Zeichenfolge statt als regulärer Ausdruck behandelt werden soll:

$ grep -F 'price: $5.00' products.txt

Welcher Befehl durchsucht products.txt nach dem wörtlichen Text price: $5.00, ohne Musterzeichen als Syntax eines regulären Ausdrucks zu behandeln?

Die Mustersyntax auswählen

GNU grep bietet drei häufig verwendete Mustermodi:

  • Standard: einfache reguläre Ausdrücke.
  • -E: erweiterte reguläre Ausdrücke mit Operatoren wie |, + und ? ohne Backslashes.
  • -F: feste Zeichenfolgen ohne Operatoren regulärer Ausdrücke.

Anker wie ^ und $ passen auf Anfang und Ende einer Zeile. So findest du in einer Textliste Dateinamen, die mit der wörtlichen Endung .txt enden:

$ grep -E '\.txt$' filenames.txt

Der Backslash macht den Punkt wörtlich; ein ungeschütztes . steht in einem regulären Ausdruck für ein beliebiges einzelnes Zeichen.

Welcher erweiterte reguläre Ausdruck passt auf Zeilen, die mit der wörtlichen Endung .txt enden?

Muster sicher angeben

Mit -e PATTERN gibst du ein Muster ausdrücklich an. Das ist besonders hilfreich, wenn es mit - beginnt, denn Anführungszeichen verhindern nicht die Optionsauswertung:

$ grep -e '-v' settings.conf

Du kannst -e mehrfach verwenden, um Zeilen auszuwählen, die zu einem der angegebenen Muster passen. Mit -f patterns.txt liest du ein Muster pro Zeile aus einer Datei.

Welcher Befehl durchsucht settings.conf nach dem Muster -v, statt es als Option zu interpretieren?

Die ausgewählte Ausgabe steuern

  • -i: Ignoriert Unterschiede zwischen Groß- und Kleinschreibung.
  • -n: Stellt ausgewählten Zeilen ihre Zeilennummer voran.
  • -v: Wählt Zeilen aus, die nicht passen.
  • -c: Gibt für jede Eingabedatei die Anzahl ausgewählter Zeilen aus.
  • -o: Gibt statt der vollständigen ausgewählten Zeile nur jeden nicht leeren passenden Teil aus.

So zählst du Zeilen mit fox unabhängig von Groß- und Kleinschreibung:

$ grep -ic 'fox' sample.txt

-c zählt ausgewählte Zeilen, nicht sämtliche Treffer innerhalb dieser Zeilen. Eine Zeile mit fox fox trägt eins zur Anzahl bei. Benötigst du mit GNU grep ausdrücklich nicht überlappende einzelne Treffer, ist grep -o PATTERN | wc -l eine mögliche Pipeline.

data.txt enthält eine Zeile mit error error und zwei Zeilen ohne Treffer. Was meldet grep -c 'error' data.txt?

stdin filtern und Verzeichnisse durchsuchen

Ohne benannte Eingabedatei liest grep von stdin und eignet sich natürlich für Pipelines:

$ env | grep '^USER='

Mit -r durchsuchst du lesbare Dateien unterhalb eines Verzeichnisses rekursiv:

$ grep -r 'listen_port' config/

Diagnosen wie Berechtigungsfehler fließen nach stderr und sind keine durchsuchte Eingabe. Grenze den Suchpfad ein und verstehe Berechtigungen, bevor du den Zugriff erhöhst.

Welche Eingabe durchsucht grep in generate-report | grep 'failed'?

Den Beendigungsstatus deuten

Bei gewöhnlichen Suchen gibt GNU grep Status 0 zurück, wenn mindestens eine Zeile ausgewählt wurde, 1, wenn keine Zeile ausgewählt wurde, und 2 bei einem Fehler. Skripte können dadurch „kein Treffer“ von einer unlesbaren Datei oder einem ungültigen Muster unterscheiden.

Optionen wie -q unterdrücken die normale Ausgabe und beenden die Suche nach dem ersten Treffer, was für Bedingungsprüfungen nützlich ist. Schließe nicht allein aus einer leeren Anzeige auf Erfolg: -q, eine Umleitung, kein Treffer und ein Fehler können wenig oder kein stdout erzeugen, besitzen aber unterschiedliche Statuswerte.

Mit diesen Übungen kannst du feste Zeichenfolgen und reguläre Ausdrücke praktisch durchsuchen:

  1. Text mit grep in Linux suchen – Übe grundlegende Suchen, Zeilennummern, Anker sowie einfache und erweiterte reguläre Ausdrücke mit grep.
  2. Linux grep Befehl: Mustersuche – Nutze grep, um in Textdateien nach Mustern zu suchen, und definiere komplexere Suchmuster mit regulären Ausdrücken.
  3. Nadel im Heuhaufen – Nutze grep, um in Protokolldateien nach Mustern zu suchen, Vorkommen zu zählen, eindeutige Werte zu extrahieren und Suchkriterien zu kombinieren.

Lektion abgeschlossen

Sie haben grep abgeschlossen

Du kannst nun zeilenorientierten Text durchsuchen und Treffer von Fehlern unterscheiden.

  • Wähle einfache, erweiterte oder feste Zeichenfolgensuche.

  • Schütze Muster durch Anführungszeichen und verwende -e bei einem führenden Bindestrich.

  • Zähle ausgewählte Zeilen, ohne sie mit einzelnen Vorkommen zu verwechseln.

  • Filtere stdin oder durchsuche ein begrenztes Verzeichnis rekursiv.

  • Deute Beendigungsstatus für Treffer, keinen Treffer und Fehler.

Lernfortschritt speichern

Erstellen Sie ein kostenloses Konto, um diese Lektion zu speichern und auf jedem Gerät weiterzulernen.

Kostenloses Konto erstellen
Zurück zu Text-Fu