Im ersten Kapitel hast du einfache Textsuche kennengelernt.

Jetzt beginnt der eigentliche Deep Dive:

👉 Reguläre Ausdrücke (Regex)

Mit Regex kannst du:

  • Zeilenanfang und -ende prüfen
  • Zahlen oder Buchstaben filtern
  • komplexe Muster definieren
  • präzise Log-Analysen durchführen

🔹 Kompatibilität

Getestet mit GNU grep 3.x unter Ubuntu 22.04 und neuer.

Hinweis:

  • Standard-grep nutzt Basic Regular Expressions (BRE)
  • Mit -E aktivierst du Extended Regular Expressions (ERE)

🔹 Zeilenanfang und Zeilenende

Erstelle eine Testdatei:

cat > regex.txt <<'EOF'
error: Datei fehlt
warning: Speicher niedrig
info: gestartet
fatal error
EOF

Zeilen, die mit „error“ beginnen

grep '^error' regex.txt

Ausgabe:

error: Datei fehlt

👉 ^ steht für Zeilenanfang

Zeilen, die mit „error“ enden

grep 'error$' regex.txt

Ausgabe:

fatal error

👉 $ steht für Zeilenende

🔹 Der Punkt . – ein beliebiges Zeichen

grep 'w.rn' regex.txt

Der Punkt steht für genau ein beliebiges Zeichen.

Beispiele, die passen würden:

  • eXor
  • e1or
  • e-or

🔹 Das Sternchen * – Wiederholung

* bedeutet:

„0 oder mehr Wiederholungen des vorherigen Zeichens“

Beispiel:

grep 'erro*r' regex.txt

Passt auf:

  • errr
  • error
  • eror

Hinweis: erro*r findet den Treffer überall in der Zeile. Deshalb passt auch „fatal error“. Wenn du nur Zeilen willst, die mit error beginnen, nutze ^erro*r.

Optional als Zusatzbefehl:

grep '^erro*r' regex.txt

🔹 Erweiterte Regex mit -E

In Basic-Regex (Standard) gelten + und ? nicht direkt.

Mit -E aktivierst du Extended Regex.

Beispiel:

grep -E 'error|warning' regex.txt

Ausgabe:

error: Datei fehlt
warning: Speicher niedrig
fatal error

👉 | bedeutet ODER (nur mit -E sauber nutzbar)

🔹 Zeichenklassen

Alle Zeilen mit Zahlen

Erstelle eine neue Datei:

cat > zahlen.txt <<'EOF'
user1
admin
test42
guest
EOF

Suche nach Zeilen mit mindestens einer Zahl:

grep '[0-9]' zahlen.txt

Ausgabe:

user1
test42

POSIX-Zeichenklassen

Beispiel: Nur Buchstaben

grep '^[[:alpha:]]\+$' zahlen.txt

Hinweis: \+ ist BRE-Syntax (GNU-kompatibel).

Alternative mit -E (sauberer):

grep -E '^[[:alpha:]]+$' zahlen.txt

🔹 Exakte Wortmuster mit -w

grep -w error regex.txt

Unterschied zu:

grep error regex.txt

-w verhindert Teilwort-Treffer.

⚠️ Typische Fehler

Lege eine neue Datei an:

cat > files.txt <<'EOF'
error.log
access.log
notes.txt
backup.tar.gz
EOF

Fehler 1: + ohne -E

grep 'a+' datei.txt

Das funktioniert nicht wie erwartet.

Korrekt:

grep -E 'a+' zahlen.txt

Fehler 2: Punkt nicht maskiert
nicht maskiert:

grep '.log' files.txt

maskiert:

grep '\.log' files.txt

Der Punkt bedeutet „beliebiges Zeichen“.

✅ Übung

Aufgabe 1

Gib nur Zeilen aus regex.txt aus, die mit „warning“ beginnen.

Aufgabe 2

Finde alle Zeilen in zahlen.txt, die nur aus Buchstaben bestehen.

Aufgabe 3

Suche alle Zeilen, die entweder „error“ oder „info“ enthalten (mit -E).

🧾 Zusammenfassung (Kapitel 2)

  • In diesem Kapitel hast du gelernt:
  • ^ und $
  • . als Platzhalter
  • * für Wiederholungen
  • | mit -E
  • Zeichenklassen [0-9]
  • POSIX-Klassen [[:alpha:]]
  • typische Regex-Fehler

👉 Reguläre Ausdrücke machen grep extrem präzise.

👉 Im nächsten Kapitel

Im nächsten Kapitel schauen wir uns erweiterte Optionen an:

  • Kontextanzeige (-A, -B, -C)
  • nur Treffer ausgeben (-o)
  • rekursive Suche (-r, -R)
  • --include und --exclude
  • praktische Admin-Szenarien

Jetzt wird grep wirklich produktiv.