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.