Logs lügen nicht, sie nuscheln nur extrem viel. Genau da kommen `awk` und `sed` ins Spiel: zwei Werkzeuge aus der Unix-Werkzeugkiste, die seit gefühlt der Kreidezeit existieren und trotzdem regelmäßig moderner wirken als irgendein Web-Dashboard mit Lade-Spinner des Todes.
Wir haben beide Tools mal wieder im Admin-Alltag rausgeholt. Nicht aus Nostalgie. Sondern weil sie schnell sind, überall laufen und keine 17 Dependencies installieren wollen, nur um eine Zeile Text umzubauen.
`sed` ist unser Skalpell für Streams. Suchen, ersetzen, löschen, einfügen. Zack. Beispiel: In einer Config steht noch eine alte IP-Adresse:
```bash
sed -i 's/192\.168\.10\.5/10.20.30.40/g' /etc/mein-dienst.conf
```
Ja, `-i` editiert direkt in der Datei. Das ist praktisch. Und gefährlich. Also machen wir bei wichtigem Kram lieber:
```bash
sed -i.bak 's/debug=true/debug=false/' app.conf
```
Dann bleibt `app.conf.bak` als Rettungsleine. Sysadmin-Airbag quasi.
Zeilen löschen? Auch simpel:
```bash
sed '/^#/d' config.conf
```
Entfernt Kommentarzeilen aus der Ausgabe. Leere Zeilen gleich mit?
```bash
sed '/^\s*$/d;/^#/d' config.conf
```
Schon sieht die Config weniger nach Archäologie aus.
`awk` ist dagegen eher das Schweizer Taschenmesser mit Taschenrechner, Feldtrenner und eingebautem Grummelblick. Es denkt in Spalten. Perfekt für Logs, CSV-artige Daten und alles, was mit Whitespace getrennt ist.
Top-IPs aus einem Nginx-Log?
```bash
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head
```
Klassiker. Funktioniert. Immer noch. Während andere Tools noch ihren JVM-Heap sortieren, hast du schon Kaffee nachgeschenkt.
Spannender wird es mit Bedingungen. Alle Requests mit HTTP 500:
```bash
awk '$9 == 500 {print $1, $7, $9}' /var/log/nginx/access.log
```
Hier ist `$9` der Statuscode, `$7` die URL, `$1` die Client-IP. Wichtig: Das passt nur, wenn dein Logformat entsprechend aussieht. Logs sind wie Schneeflocken. Nur nerviger.
Auch Summen gehen gut. Beispiel: Speicherverbrauch aus einer Prozessliste addieren:
```bash
ps aux | awk '{sum += $6} END {print sum/1024 " MB"}'
```
Nicht perfekt wissenschaftlich, aber für den schnellen Blick völlig okay.
Richtig praktisch wird `awk` mit eigenen Trennern. Eine `/etc/passwd` liest sich so:
```bash
awk -F: '{print $1, $3, $7}' /etc/passwd
```
`-F:` setzt den Doppelpunkt als Feldtrenner. Ausgabe: User, UID, Shell. Schnell prüfen, wer eine echte Login-Shell hat:
```bash
awk -F: '$7 !~ /(nologin|false)$/ {print $1, $7}' /etc/passwd
```
Unser Admin-Merksatz: `sed` verändert Zeilen, `awk` versteht Spalten. Natürlich können beide mehr. Sehr viel mehr. Aber genau diese einfache Trennung hilft im Alltag.
Noch ein schönes Duo: Config-Werte auslesen und bereinigen.
```bash
sed '/^\s*#/d;/^\s*$/d' app.conf | awk -F= '{print $1 " -> " $2}'
```
Erst Kommentare und Leerzeilen weg, dann Key-Value hübsch ausgeben. Kein Python-Skript, kein YAML-Parser, kein Drama. Wobei: Bei echtem YAML bitte nicht mit `sed` herumchirurgieren. Das endet sonst wie RAID5 mit zwei kaputten Platten.
Fazit aus unserem Selbstversuch: `awk` und `sed` bleiben. Nicht, weil sie alt sind. Sondern weil sie genau das tun, was Admins ständig brauchen: Text schnell filtern, umbauen, zusammenzählen und verstehen. Direkt auf der Shell. Ohne Schnickschnack. Ohne Login ins nächste Tool-Portal. Einfach tippen, prüfen, fertig.