- 1 Section
- 10 Lessons
- unbegrenzt
- Reguläre Ausdrücke & Textverarbeitung10
- 1.1Was sind Reguläre Ausdrücke?
- 1.2Grundzeichen: Literale, Zeichenklassen, Quantoren
- 1.3Anker, Gruppen und Alternation
- 1.4Gierige vs. faule Quantoren
- 1.5Regex in Python: re-Modul
- 1.6Regex in JavaScript
- 1.7grep, sed, awk – Regex auf der Kommandozeile
- 1.8Regex für Validierung: E-Mail, IP, PLZ, Datum
- 1.9Regex in Datenbanken: LIKE, REGEXP
- 1.10Aufgaben Reguläre Ausdrücke
grep, sed, awk – Regex auf der Kommandozeile
Reguläre Ausdrücke entstanden zusammen mit Unix in den 1970ern – und nirgends sind sie so tief integriert wie in der Unix-Welt. Auf der Linux-Shell hast du drei klassische Werkzeuge die Regex zur Lebensgrundlage haben: grep (suchen), sed (ersetzen) und awk (Spalten verarbeiten). Wer Server administriert, Logs auswertet oder einfach große Textmengen filtert, kommt um diese Drei nicht herum.
Du kannst sie alle auch unter Windows nutzen: in WSL, in Git Bash, oder als Portierungen. PowerShell hat eigene Pendants (Select-String, -replace) die das gleiche tun. Diese Lektion zeigt die Unix-Klassiker und ihre Stärken.
1) Die drei Werkzeuge im Überblick
Jedes der drei Tools hat eine klare Spezialisierung. Wenn du verstehst was jedes kann – und was nicht – wählst du leicht das richtige für deine Aufgabe:
cat log.txt | grep ERROR | awk '{print $3}'.2) grep: das schweizer Suchmesser
grep sucht zeilenweise. Wenn das Pattern in einer Zeile matched, wird die Zeile ausgegeben. Sehr einfache, aber enorm nützliche Grundfunktion:
Die wichtigsten Flags:
| Flag | Bedeutung |
|---|---|
-i | Case-insensitive (ERROR = error = Error) |
-v | Invert: Zeilen die NICHT matchen |
-n | Mit Zeilennummer ausgeben |
-c | Nur Anzahl der Treffer, nicht die Zeilen |
-l | Nur Dateinamen mit Treffern (statt Zeilen) |
-r oder -R | Rekursiv in Verzeichnissen |
-A 3 | 3 Zeilen nach Treffer mitausgeben |
-B 3 | 3 Zeilen vor Treffer |
-C 3 | 3 Zeilen drumherum (Context) |
-E | Extended Regex (POSIX ERE) |
-P | Perl-Compatible Regex (PCRE, mächtiger) |
-w | Match nur ganze Wörter |
--color | Treffer farblich hervorheben |
Besonders nützlich: -A/-B/-C für Kontext. Bei einer Error-Meldung willst du oft die umliegenden Zeilen sehen um zu verstehen was vorher passierte. Mehr zu Log-Analyse in K46 L7.
3) grep: drei Varianten
Es gibt drei grep-Versionen mit unterschiedlichen Regex-Dialekten:
- grep (BRE): Basic Regular Expression. Standard.
+und?müssen escaped werden:\+,\?. Auch Klammern:\(...\). Veraltet, aber default. - grep -E (ERE): Extended Regular Expression. Wie aus L2 bekannt. Quantoren ohne Escape, normale Klammern für Gruppen. Empfohlen für moderne Nutzung.
- grep -P (PCRE): Perl-Compatible. Volle Mächtigkeit:
\d,\w, Lookarounds, Backreferences. Nicht überall verfügbar.
Faustregel: standardmäßig grep -E nutzen, oder bei komplexen Patterns mit \d/\w direkt grep -P.
4) grep: praktische Beispiele
Klassische grep-Aufgaben aus dem Admin-Alltag:
Der letzte Pipe-Befehl ist eine Pipeline-Kombination wie sie oft vorkommt: grep filtern → grep extrahieren mit -o → sort + uniq zum Aggregieren. Solche Pipelines sind das Markenzeichen der Unix-Philosophie: kleine Werkzeuge die zusammen Großes leisten.
5) sed: Stream Editor für Ersetzungen
sed liest Zeile für Zeile, wendet Befehle an, gibt das Ergebnis aus. Der häufigste Befehl ist s/pattern/replacement/flags (substitute):
-i-Flag macht in-place editing – die Originaldatei wird überschrieben! Wenn das Pattern falsch ist, sind die Daten weg. Best Practice: zuerst ohne -i testen und das Ergebnis prüfen. Bei wichtigen Daten: sed -i.bak '...' – das macht zusätzlich eine Backup-Datei mit Endung .bak.6) sed: Gruppen und Backreferences
Die wahre Stärke von sed kommt mit Capturing Groups und Backreferences. Im Standard-sed musst du Gruppen mit \(...\) escapen, im ERE-Modus (-E) ohne Backslash. Backreferences sind immer \1, \2, ...:
Bei der DSGVO-konformen Datenmaskierung – z.B. E-Mails vor Speicherung anonymisieren – ist sed sehr nützlich. Auch beim Aufbereiten von Log-Dateien für externe Auswertung.
7) sed: weitere Befehle
Sed kann mehr als nur substituieren. Weitere häufige Befehle:
Mit diesen Befehlen kannst du komplexe Text-Transformationen bauen. Sed-Skripte können beliebig lang werden – aber dafür gibt's heutzutage bessere Werkzeuge (Python, awk). Sed ist optimal für einzeilige Pipeline-Operationen.
8) awk: Mini-SQL für Textdateien
awk ist anders als grep und sed: es ist eine eigene Mini-Programmiersprache. Ideal für Daten in Spalten – Logs, CSV, Konfigurationsdateien. Die Grundsyntax:
Pro Zeile prüft awk das PATTERN – ist es wahr, wird die AKTION ausgeführt. PATTERN kann sein: Regex, Bedingung, leer (immer). AKTION ist meist print .... Spalten werden mit $1, $2, etc. angesprochen, $0 ist die ganze Zeile:
Spürst du die Mächtigkeit? Mit einem Einzeiler hast du SQL-ähnliche Filter über CSV-Daten. $3 == "Berlin" ist das Pattern, {print $1} die Aktion.
9) awk: Berechnungen
awk kann rechnen – Summen, Durchschnitte, Counts:
Die spezielle END-Sektion läuft nach allen Zeilen. BEGIN läuft vor. Damit baust du Aggregate – Summen, Counts, Durchschnitte. Außerdem hat awk assoziative Arrays wie count[$3] – das ist quasi ein Dictionary indexiert nach Stadt-Namen. Das macht awk fast zu einer richtigen Programmiersprache.
10) Live-Vergleich der drei
Schauen wir gleiche Aufgaben mit allen drei Tools:
awk '/ERROR/ {n++} END {print n}' app.log
cut -d',' -f3 data.csv
sed '/X/d' file.txt
cat log | grep ERROR | awk '{print $3}' | sort | uniq -c | sort -rn | head – findet die Top-10 häufigsten Werte in Spalte 3 aller ERROR-Zeilen. Das ist die Kunst der Unix-Pipelines.11) PowerShell-Äquivalente
Falls du auf Windows arbeitest und PowerShell nutzt: die Klassiker haben dort PowerShell-Pendants. Anders strukturiert (Objekte statt Text), aber gleiche Wirkung:
| Unix | PowerShell |
|---|---|
grep "X" file | Select-String "X" file |
grep -i | Select-String -CaseSensitive:$false |
grep -v | Select-String -NotMatch |
sed 's/A/B/g' | (Get-Content file) -replace "A","B" |
awk '{print $3}' | ... | %{ ($_ -split " ")[2] } |
| Spalten-Filterung | ... | Where-Object {$_.Property -eq "X"} |
PowerShell ist objektorientiert – statt Text-Streams hat man Objekte mit Properties. Das macht manche Operationen umständlicher (für CSV-Tabellen einfacher), aber das Konzept ist identisch.
12) Praxis-Beispiele aus dem IT-Alltag
Typische Aufgaben die du mit grep/sed/awk in Minuten löst – die ohne sie Stunden bräuchten:
Solche Befehle sind das tägliche Brot von Sysadmins, DevOps und FISIs. Bei größeren Mengen sind sie zigfach schneller als ein Python-Skript – und in einer Zeile geschrieben.
13) Wann nicht grep/sed/awk?
Auch diese mächtigen Werkzeuge haben Grenzen. Wann lieber Python oder ein Editor?
- JSON-Strukturen parsen: nutze
jqoder Python. Regex auf JSON ist sehr fragil. - HTML/XML: dito – richtigen Parser nutzen.
- Mehrzeilige Patterns: grep/sed sind zeilen-orientiert. Mit Tricks geht's, aber Python ist klarer.
- Komplexe Transformationen: wenn dein awk-Skript über 20 Zeilen wird, ist Python lesbarer und wartbarer.
- Unicode-Sensible Sachen: ältere Versionen haben Probleme. Python 3 ist da robuster.
Faustregel: bis 1-2 Pipeline-Befehle → Shell mit grep/sed/awk. Komplexer → Python-Skript schreiben.
Zusammenfassung
Drei klassische Unix-Werkzeuge: grep (suchen + Zeilen ausgeben), sed (suchen + ersetzen), awk (Spalten verarbeiten, Mini-Programmiersprache). grep-Flags: -i, -v, -n, -c, -r, -A/-B/-C (Kontext), -E (ERE empfohlen), -P (PCRE), -o (nur Match). sed: s/pat/repl/g, mit -i in-place (Backup mit -i.bak!), Backrefs \1. awk: $1/$2 für Spalten, -F',' für Trenner, BEGIN/END-Blöcke. Klassische Pipelines: grep|sort|uniq -c|sort -rn für Log-Analyse. Nicht für JSON/HTML – dort echte Parser.
