Logs sind oft „laut“: Kommentare, Debug-Zeilen, lange Timestamps. Mit sed kannst du sie schnell bereinigen, vereinheitlichen oder Massen-Ersetzungen durchführen (z. B. IPs anonymisieren) – sogar über viele Dateien hinweg.
🔹 Schnellbereinigung einzelner Dateien
- Kommentare (beginnend mit
#) entfernensed '/^#/d' app.log > app.clean.log
- Leere Zeilen entfernen
sed '/^[[:space:]]*$/d' app.log > app.clean.log
- Timestamps abschneiden (Beispiel:
YYYY-MM-DD HH:MM:SSam Zeilenanfang)sed 's/^[0-9-]{10} [0-9:]{8} //' app.log > app.notime.log - Level normalisieren (
INFO→HINWEIS)sed 's/bINFOb/HINWEIS/g' app.log > app.norm.log
Tipp: Erst ohne
-i(in-place) arbeiten und in neue Dateien schreiben – so siehst du das Ergebnis risikofrei.
🔹 Sicher in-place ändern (mit Backup)
Wenn das Ergebnis passt, kannst du direkt in der Datei ersetzen – mit Backup:
sed -i.bak 's/OLD/IP_NEU/g' access.log # erzeugt: access.log.bak
macOS/BSD:
-i ''(ohne Backup) oder-i .bak(mit Suffix) nutzen.
GNU/Linux:-ierlaubt optionales Suffix wie oben.
🔹 In vielen Logdateien gleichzeitig ersetzen
Variante A: Globbing (ein Ordner)
sed -i.bak 's/203.0.113.42/ANON_IP/g' /var/log/apache2/*.log
Variante B: Rekursiv mit find
Nur reguläre Dateien mit Endung .log:
find /var/log -type f -name "*.log" -exec sed -i.bak 's/203.0.113.42/ANON_IP/g' {} +
Das
+hängt viele Dateien an einensed-Aufruf an (performant).
Punkt in IPs escapen:.matcht einen echten Punkt, nicht „beliebiges Zeichen“.
Variante C: Mit xargs (falls du gezielt aus einer Trefferliste arbeiten
willst)Erst Dateien mit dem Wort/IP finden, dann nur dort ersetzen:
grep -rl --exclude='*.bak' '203.0.113.42' /var/log | xargs sed -i.bak 's/203.0.113.42/ANON_IP/g'
-
grep -r→ rekursiv -
-l→ nur Dateinamen -
--exclude→ Backups/Rotations ausschließen
Variante D: Rotierte Logs berücksichtigen
Nur unkomprimierte Logs (ohne .gz) bearbeiten:
find /var/log -type f -name "*.log" ! -name "*.gz" -exec sed -i.bak 's/foo/bar/g' {} +
Komprimierte Logs vorher entpacken oder mit zgrep/zcat arbeiten (lesen/prüfen), danach wieder packen.
🔹 Dry-Run & Sicherheit (empfohlen!)
-
Nur Treffer zählen (lohnt sich die Aktion überhaupt?):
grep -Rnc --include="*.log" '203.0.113.42' /var/log
-
Vorschau der Ersetzungen an einer Datei:
sed 's/203.0.113.42/ANON_IP/g' access.log | head
-
Diff vor/nachher (bei In-Place mit Backup):
sed -i.bak 's/203.0.113.42/ANON_IP/g' access.log diff -u access.log.bak access.log | less
- Rechte bedenken: Viele Logs sind Root-geschützt → Befehle ggf. mit sudo ausführen.
🔹 Typische Bereinigungsrezepte für Logs
-
Nur ERROR/WARN behalten:
sed -n '/ERROR|WARN/p' app.log > app.errors.log
-
Zeitstempel eckige Klammern entfernen:
[2025-09-24 12:34:56]
sed 's/^[[^]]*] //' app.log > app.no_brackets.log
-
IP-Adressen anonymisieren (IPv4 generisch):
sed -E 's/([0-9]{1,3}.){3}[0-9]{1,3}/ANON_IP/g' access.log > access.anon.log -
Pfadpräfix kürzen (z. B. lange Root-Pfadanteile):
sed 's|/var/www/html||g' access.log > access.short.log
🔹 Bonus: Kombi mit awk/sort/uniq nach der Bereinigung
Beispiel: IPs anonymisieren und häufigste Pfade zählen:
sed -E 's/([0-9]{1,3}.){3}[0-9]{1,3}/ANON_IP/g' access.log
| awk '{print $7}'
| sort | uniq -c | sort -nr | head
🔹 Übungen
1. Mehrdatei-Ersetzung (Dry-Run → Live):
- Finde alle Logs unter
/var/log, dieERRORenthalten.grep -Rli --include="*.log" 'ERROR' /var/log
- Ersetze
ERROR→FEHLERin genau diesen Dateien mit Backup.
2. IP-Anonymisierung im Apache-Ordner:
- Ersetze
203.0.113.42durchANON_IPin allen*.logunter/var/log/apache2. - Prüfe per
diff, was sich geändert hat.
3. Cleanup-Skript schreiben:
- Lege log_
cleanup.sedan, das - leere Zeilen löscht,
- Timestamps entfernt,
-
DEBUG-Zeilen löscht.
Wende es rekursiv auf/var/log/myapp/an (mit Backups).
✅ Zusammenfassung
-
sedeignet sich perfekt, um Logs zu bereinigen oder massiv zu ändern (z. B. IP-Anonymisierung) – auch über viele Dateien. - Für viele Dateien:
sed -i.bakmitfind … -exec … +odergrep -rl … | xargs sed -i.bak …ist der Standard-Workflow. -
Sicherheit: Immer mit Dry-Run, Backups und ggf.
diffarbeiten. - Rotationen/Kompression beachten (
*.gzausschließen oder entpacken).
👉 Im nächsten Kapitel (4) analysieren wir bereinigte Logs mit awk: Statuscodes zählen, IP-Toplisten, Spitzenzeiten pro Stunde – alles direkt im Terminal. Möchtest du, dass ich Kapitel 4 gleich schreibe?
📚 Inhaltsverzeichnis
👉 Log-Analyse Kapitel 1: Logs im Terminal lesen – cat, less, tail & grep
👉 Log-Analyse Kapitel 2: Filtern mit grep und regulären Ausdrücken
👉 Log-Analyse Kapitel 3: Logs bereinigen mit sed – inkl. Mehrdatei-Änderungen
👉 Log-Analyse Kapitel 4: Logs analysieren mit awk
👉 Log-Analyse Kapitel 5: Logs kombinieren mit grep, sed, awk, sort, uniq & cut
👉 Log-Analyse Kapitel 6: Praxisprojekt – Apache-/Nginx-Access-Logs analysieren
👉 Log-Analyse Kapitel 7: Praxisprojekt – Systemlogs analysieren (auth.log & journalctl)
⭐ Bonus-Kapitel
👉 Log-Analyse Kapitel 8 (Bonus): Eigene Auswertungs-Skripte für Logs schreiben
👉 Log-Analyse Kapitel 9 (Bonus): Logs visualisieren mit CSV & gnuplot
