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
#) entfernen
sed '/^#/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:SS am 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: -i erlaubt 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 einen sed-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):
2. IP-Anonymisierung im Apache-Ordner:
- Ersetze
203.0.113.42 durch ANON_IP in allen *.log unter /var/log/apache2.
- Prüfe per
diff, was sich geändert hat.
3. Cleanup-Skript schreiben:
- Lege log_
cleanup.sed an, das
- leere Zeilen löscht,
- Timestamps entfernt,
DEBUG-Zeilen löscht.
Wende es rekursiv auf /var/log/myapp/ an (mit Backups).
✅ Zusammenfassung
sed eignet sich perfekt, um Logs zu bereinigen oder massiv zu ändern (z. B. IP-Anonymisierung) – auch über viele Dateien.
- Für viele Dateien:
sed -i.bak mit find … -exec … + oder grep -rl … | xargs sed -i.bak … ist der Standard-Workflow.
- Sicherheit: Immer mit Dry-Run, Backups und ggf.
diff arbeiten.
- Rotationen/Kompression beachten (
*.gz ausschließ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