grep, sed & awk: Textverarbeitung im Terminal

Logs durchsuchen, Konfigurationen anpassen, Ausgaben auswerten: Für die Textverarbeitung im Terminal gibt es drei mächtige Klassiker – grep, sed und awk. Wer sie beherrscht, spart täglich Zeit. In dieser Anleitung lernst du die Grundlagen von grep, sed und awk anhand praktischer Beispiele.

grep: Zeilen finden

grep durchsucht Text nach einem Muster und gibt die passenden Zeilen aus. Das einfachste Beispiel sucht nach „error“ in einer Datei:

grep "error" logfile.txt

Die wichtigsten Optionen machen grep richtig nützlich:

OptionWirkung
-iGroß-/Kleinschreibung ignorieren
-rRekursiv durch Verzeichnisse suchen
-nZeilennummern anzeigen
-vNur Zeilen anzeigen, die NICHT passen
-cNur die Anzahl der Treffer zählen

Besonders praktisch in Kombination mit einer Pipe, etwa um journalctl-Ausgaben zu filtern: journalctl | grep ssh.


sed: Text ersetzen

sed (Stream Editor) bearbeitet Text zeilenweise – am häufigsten zum Suchen und Ersetzen. Der folgende Befehl ersetzt jedes „alt“ durch „neu“:

sed "s/alt/neu/g" datei.txt

Das s steht für „substitute“, das g für „global“ (alle Vorkommen pro Zeile). Standardmäßig gibt sed das Ergebnis nur aus. Um die Datei direkt zu ändern, nutzt du -i:

sed -i "s/alt/neu/g" datei.txt

Vorsicht: -i überschreibt die Datei ohne Nachfrage – teste den Befehl vorher ohne -i.


awk: Spalten auswerten

awk ist ideal für Text in Spalten. Es zerlegt jede Zeile in Felder, die du über $1, $2 usw. ansprichst. Dieser Befehl gibt die erste und dritte Spalte aus:

awk '{print $1, $3}' datei.txt

Mit -F legst du das Trennzeichen fest – etwa einen Doppelpunkt, um die Benutzernamen aus der /etc/passwd zu ziehen:

awk -F: '{print $1}' /etc/passwd

Die drei Werkzeuge kombinieren

Ihre volle Stärke entfalten die Tools per Pipe. Ein Beispiel, das die häufigsten IP-Adressen in einem Zugriffslog ermittelt:

grep "GET" access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head

Solche Einzeiler sind das Rückgrat vieler Bash-Skripte.


Praxisbeispiel: ein Logfile analysieren

Ein typischer Alltagsfall: Du willst wissen, welche Fehler in einem Logfile am häufigsten auftreten. Zuerst filterst du mit grep die Fehlerzeilen, dann zählst du sie:

grep -i "error" app.log | sort | uniq -c | sort -rn | head

uniq -c zählt identische Zeilen, sort -rn sortiert absteigend nach Häufigkeit. So siehst du auf einen Blick die häufigsten Fehler. Solche Auswertungen ergänzen sich hervorragend mit journalctl für systemd-Dienste.


Häufige Fragen

Wann nutze ich grep, wann awk?

grep ist für einfaches Finden von Zeilen gedacht. Sobald du bestimmte Spalten extrahieren oder rechnen willst, ist awk das richtige Werkzeug. sed liegt dazwischen und ist auf das Ersetzen spezialisiert.

Verändert grep meine Dateien?

Nein, grep liest nur und gibt Treffer aus. Ändernd wirkt allein sed mit der Option -i – deshalb dort besonders vorsichtig sein.

Kann ich reguläre Ausdrücke verwenden?

Ja, alle drei Werkzeuge unterstützen reguläre Ausdrücke. Für erweiterte Muster nutzt du bei grep die Option -E (bzw. egrep).


Fazit

grep findet, sed ersetzt, awk wertet Spalten aus – mit diesen drei Werkzeugen bewältigst du praktisch jede Textaufgabe im Terminal. Per Pipe kombiniert werden sie zu mächtigen Einzeilern. Es lohnt sich, die Grundbefehle im Alltag zu üben; sie gehören zum wichtigsten Handwerkszeug unter Linux.

Siehe auch  Logs auswerten mit journalctl – Anleitung
Nach oben scrollen