UNIX AWK & SED
awk und sed – Die Werkzeuge der Textmagie in der Shell
In der Welt der Unix- und Linux-Kommandozeilen gehören awk und sed zu den wichtigsten Werkzeugen für Textverarbeitung. Sie ermöglichen effiziente Manipulation, Analyse und Filterung von Textdaten direkt in der Konsole – ohne eine vollständige Programmiersprache verwenden zu müssen. Dieser Artikel erklärt, was awk und sed sind, wie sie funktionieren und wann man sie einsetzt.
🔧 Was ist sed?
sed steht für Stream Editor. Es liest Textzeilen nacheinander ein, verarbeitet sie und gibt das Ergebnis aus – ohne die Originaldatei zu verändern (außer man speichert explizit zurück).
Hauptfunktionen von sed:
Suchen und Ersetzen
Zeilen löschen oder einfügen
Textmuster bearbeiten mit regulären Ausdrücken
Beispiele:
bash
# Ersetze "Hund" durch "Katze" in einer Datei
sed 's/Hund/Katze/g' datei.txt
# Lösche alle Zeilen, die mit "#" beginnen
sed '/^#/d' datei.txt
# Füge nach jeder Zeile mit "Fehler" eine Warnung ein
sed '/Fehler/a\Achtung: Fehler entdeckt' datei.txt
Besonderheiten:
Reguläre Ausdrücke ermöglichen komplexe Muster
-i-Flag ermöglicht In-Place-Bearbeitung: sed -i 's/foo/bar/g' datei.txt
📊 Was ist awk?
awk ist ein Mustererkennungs- und Bearbeitungswerkzeug mit integrierter Programmiersprache. Es wurde entwickelt, um strukturierte Textdateien wie Logdateien oder CSVs zu analysieren.
Hauptfunktionen von awk:
Zeilen filtern nach Bedingungen
Felder extrahieren und berechnen
Formatierte Ausgaben erstellen
Beispiele:
bash
# Gib das erste Feld (z.B. Namen) jeder Zeile aus
awk '{print $1}' datei.txt
# Zeige alle Zeilen, bei denen das dritte Feld größer als 100 ist
awk '$3 > 100' datei.txt
# Summiere Werte aus dem zweiten Feld
awk '{sum += $2} END {print "Summe:", sum}' datei.txt
Besonderheiten:
Felder sind standardmäßig durch Leerzeichen getrennt (-F kann Trennzeichen ändern)
Komplexe Skripte sind möglich: if/else, Schleifen, Funktionen
🔄 awk vs. sed – Wann welches Tool?
Aufgabe |
Tool |
Empfehlung |
Einfaches Suchen & Ersetzen |
sed |
Schnell und effizient für einzelne Muster |
Feldbasiertes Parsen (z.B. CSV) |
awk |
Ideal zur Extraktion und Berechnung |
Komplexe Textbearbeitung |
awk |
Mehr Logik möglich durch eigene Sprache |
Stream-basierte Bearbeitung |
sed |
Besonders schnell bei großen Dateien |
🧠 Praxisbeispiel – Kombination beider Tools
Angenommen, wir haben eine Logdatei server.log und möchten alle IP-Adressen extrahieren, die einen Fehler verursacht haben:
bash
sed -n '/ERROR/p' server.log | awk '{print $1}' | sort | uniq -c
Erklärung:
sed -n '/ERROR/p': Gibt nur Zeilen mit "ERROR" aus
awk '{print $1}': Extrahiert die IP-Adresse (angenommen, sie ist das erste Feld)
sort | uniq -c: Zählt, wie oft jede IP vorkommt
🧰 Fazit
awk und sed sind essenzielle Werkzeuge für jeden, der regelmäßig mit Textdaten auf der Kommandozeile arbeitet. Sie sind leichtgewichtig, extrem leistungsfähig und in fast allen Unix-Systemen vorinstalliert. Wer sie beherrscht, kann viele Aufgaben automatisieren, die sonst mühsam wären.