- 1 Section
- 10 Lessons
- unbegrenzt
- Bash / Shell-Scripting10
- 1.1Was ist eine Shell? bash, sh, zsh im Vergleich
- 1.2Grundlegende Befehle: cd, ls, cp, mv, rm, grep
- 1.3Variablen, Eingabe und Ausgabe
- 1.4Kontrollstrukturen: if, case, for, while
- 1.5Funktionen und Argumente
- 1.6Fehlerbehandlung: exit codes, trap
- 1.7Textverarbeitung: sed, awk, cut, sort
- 1.8Dateisystem-Automation: find, xargs, cron
- 1.9Netzwerk-Scripting: curl, ssh, rsync
- 1.10Praxisprojekt: Systemstatus- und Backup-Script
Textverarbeitung: sed, awk, cut, sort
Wenn du als FISI arbeitest, verbringst du einen erheblichen Teil deiner Zeit mit Text-Verarbeitung: Logfiles durchsuchen, CSV-Daten umwandeln, Konfigurationsdateien anpassen, Server-Output parsen. Die klassischen Unix-Tools dafür sind in den 70ern entstanden und werden heute genauso intensiv genutzt wie damals – weil sie unschlagbar mächtig sind.
In dieser Lektion lernst du die wichtigsten: grep (suchen), sed (ersetzen), awk (Spalten verarbeiten), cut, sort, uniq, tr. Jedes davon allein ist nützlich – aber die wahre Stärke kommt durch Pipes, die diese Werkzeuge verketten. Für richtig komplexe Aufgaben greift man später zu Python – aber für 80% aller Textaufgaben reichen diese Tools.
1) Die Werkzeugkiste im Überblick
Ein Überblick was welches Tool macht. Sie ergänzen sich:
2) Live-Sandbox: Tools ausprobieren
Hier kannst du die wichtigsten Operationen auf einer Beispiel-CSV-Datei live testen. Wähle ein Tool und sieh wie es das Ergebnis verändert:
cat datei | grep "x" | sort | uniq. Probier zur Übung verschiedene Kombinationen auf eigene Daten.3) grep – die wichtigsten Optionen vertieft
Du kennst grep schon aus L2. Hier die Optionen die in der Praxis wirklich zählen:
Häufiges Pattern für Server-Admins: grep -rn "TODO" . findet alle TODO-Kommentare in allen Code-Dateien mit Datei + Zeilennummer. Oder: tail -f /var/log/syslog | grep --line-buffered "ERROR" zeigt live nur Fehler aus dem System-Log.
4) Reguläre Ausdrücke – Pattern-Magie
grep, sed und awk können mit Regular Expressions (Regex) suchen. Das ist eine eigene kleine Mini-Sprache für Suchmuster. Hier die wichtigsten Bausteine:
+, ?, |, () direkt – einschaltbar mit grep -E oder sed -E. PCRE ist die Perl-kompatible Version mit allen Features (\d, \s, Lookahead) – mit grep -P. Beispiele: grep -E "^(GET|POST) /api" findet HTTP-Requests, grep -E "[0-9]{3}-[0-9]{4}" Telefonnummern.5) sed – Stream Editor für Such-und-Ersetz
sed liest Text Zeile für Zeile und führt Edit-Befehle aus. Der häufigste Anwendungsfall ist Substitution mit dem s/alt/neu/-Befehl:
sed ist sehr mächtig – es kann theoretisch wie ein vollständiges Programm arbeiten (Schleifen, bedingte Befehle, Skript-Dateien). In der Praxis nutzen 95% der Leute es nur für s/.../.../g. Für komplexere Manipulationen lieber zu awk oder Python greifen.
6) awk – Programmiersprache für Tabellen
awk ist mehr als ein Tool – es ist eine ganze Mini-Programmiersprache, speziell für Text in Zeilen-mit-Spalten. Es liest Eingabe Zeile für Zeile, splittet jede Zeile automatisch in Felder (Default: Whitespace), und führt Code pro Zeile aus:
Awk hat eingebaute Variablen die du kennen solltest:
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10. Erst extrahieren wir Spalte 1 (IP), dann sortieren, dann mit uniq -c zählen, nochmal numerisch absteigend sortieren, Top 10. Eine Zeile die Stunden Excel-Arbeit ersetzt.7) cut – einfache Spalten-Extraktion
Wenn awk overkill ist und du nur eine Spalte rausziehen willst: cut ist schlanker. Mit Trenner-Zeichen (-d) und Feld-Nummer (-f):
cut ist limitiert (keine komplexen Trenner, kein Filtern) – aber für simple Spalten-Extraktion schneller getippt als awk. Praktisch wenn die Daten klar tabuliert sind.
8) sort und uniq – Reihenfolge und Duplikate
Diese zwei Tools werden fast immer zusammen verwendet. uniq entfernt nur direkt aufeinanderfolgende Duplikate – deshalb meistens sort | uniq:
Eine typische Anwendung: aus einer Log-Datei die häufigsten Fehlermeldungen finden – grep "ERROR" log.txt | sort | uniq -c | sort -rn. Erst Fehler extrahieren, sortieren (gleiche Fehler nebeneinander), zählen, nach Häufigkeit sortieren. Genial einfach.
9) tr – einzelne Zeichen ersetzen
Wenn du nur Zeichen-Ersetzungen brauchst (nicht ganze Strings), ist tr schneller als sed:
10) Klassische Pipelines aus der Praxis
Hier sind Pipeline-Klassiker die du im Server-Alltag sehen wirst:
~/.bashrc: alias topip='awk "{print \$1}" /var/log/access.log | sort | uniq -c | sort -rn | head' – ein Wort statt langer Pipeline.11) Wann zu Python wechseln?
Bash-Pipelines sind mächtig – aber haben Grenzen. Wenn du eines davon brauchst, lieber zu Python greifen:
- Echte JSON/XML/YAML-Parser (Bash kann nur Ausnahmen mit jq für JSON)
- Komplexe Datenstrukturen (Dicts, verschachtelt)
- Mathematische Berechnungen über simple Summen hinaus
- Wenn dein Skript > 100 Zeilen wird
- Wenn Tests, Wartbarkeit oder Wiederverwendung wichtig sind
Faustregel: Bash für Glue-Code zwischen Programmen und einfache Transformationen. Python für echte Datenverarbeitung mit Logik. Das ist auch die übliche DevOps-Praxis: Bash für Deploy-Steps, Python für komplexere Tools.
Zusammenfassung
grep: Zeilen filtern. -i case-insensitive, -v invertieren, -n Zeilennummern, -r rekursiv, -E erweiterte Regex, -A/-B/-C N Kontext. sed: Stream-Editor, vor allem s/alt/neu/g. -i in-place, -E erweiterte Regex. awk: Spalten-Programmiersprache. $1, $2, $NF Spalten, NF Anzahl, NR Zeilennr, BEGIN/END Blöcke. -F Trenner setzen. cut: einfache Spalten-Extraktion mit -d und -f. sort: -n numerisch, -r rückwärts, -k nach Spalte, -u uniq. uniq: nur nach sort, -c zählen, -d nur Duplikate. tr: Zeichen-Ersetzung. Verkettung via Pipes ist DAS Killer-Feature. Klassiker: sort | uniq -c | sort -rn = „häufigste Werte zählen".
