Textbearbeitung auf der Shell: grep, cut, awk, sed und tr

written by Martin Häcker on

`tr` in aktion

Diese fünf kleinen Tools sind echte Arbeitspferde für jeden, der mit Text auf der Kommandozeile arbeitet. Sie haben viele Optionen – aber man braucht nicht alles zu kennen. Schon mit ein paar Grundbefehlen kann man 80 % der typischen Aufgaben lösen.

1. grep – Zeilen finden

grep filtert Textzeilen anhand von Mustern. Praktisch, wenn man in langen Outputs schnell das Relevante sehen will.

Aufgabe Befehl Beispiel
Textzeilen ausgeben, die ein Wort enthalten grep PATTERN `cat protokoll.txt grep "Fehler"`
Zeilen ausschließen grep -v PATTERN grep -v "^#" protokoll.txt
In einem ganzen Projektbaum nach grep -r PATTERN DIR grep -r "TODO" src/

Tipps

  • -i ignoriert Groß/Kleinschreibung
  • -e aktiviert Reguläre Ausdrücke (unter linux gibt es noch -P für Perl-kompatible Regex)

Kombinationen über Pipes machen grep besonders stark:

grep -r -P "def \w*\(" . --after-context 30 | grep "foo" | grep -v "bar"

Für große Projekte lohnt sich ripgrep (rg), weil es schneller ist, .gitignore respektiert und reguläre Ausdrücke standardmäßig aktiviert.

2. cut – Spalten und Zeichen

cut schneidet Spalten oder Zeichen aus Textzeilen heraus. Funktioniert am besten, wenn der Trenner ein einzelnes Zeichen ist.

Aufgabe Befehl Beispiel
Spalte 2 eine CSV 1 -d ',' -f 2 cut -d ',' -f 2 daten.csv
Zeichen 5‑10 einer Zeile -c 5-10 cut -c 5-10 string.txt
Mehrere Felder -f 1,3,5 cut -d ';' -f 1,3,5 daten.txt

Bei Whitespace-getrennten Daten stößt cut an Grenzen – da ist awk besser.

3. awk – Felder und Muster

awk versteht Texte als Felder, getrennt durch Whitespace oder ein angegebenes Zeichen. Wenn man möchte, kann man mit awk Text-Dateien fast wie Datenbanken abfragen, aber für den Anfang:

Aufgabe Befehl Beispiel
Spalten ausgeben {print $1, $3} awk '{print $1, $3}' daten.txt
Letzte Spalte ausgeben {print $NF} awk '{print $NF}' daten.txt
Summe einer Spalte {s+=$2} END {print s} awk '{s+=$2} END {print s}' zahlen.txt

Nützliche Variablen

  • NF = Anzahl Felder in der Zeile
  • NR = aktuelle Zeilennummer

4. sed – Suchen und Ersetzen

sed ist ein Stream-Editor: ideal für Ersetzungen und einfache Transformationen.

Aufgabe Befehl Beispiel
Ersetzen s/alt/neu/g sed 's/Fehler/Warning/g' log.txt

Vorsicht: Nie direkt in die gleiche Datei schreiben mit > – sonst überschreibst du sie, bevor sie gelesen wurde. DAMIT HABE ICH SCHON DATEN VERLOREN Stattdessen:

sed -i 's/alt/neu/g' datei.txt   # Direkt in der Datei ändern

5. tr – Zeichen übersetzen

Aufgabe Befehl Beispiel
Groß→Klein tr [:upper:][:lower:] tr '[:upper:]' '[:lower:]' < input.txt
Leerzeichen löschen tr -d ' ' tr -d ' ' < file
ROT13 (Caesar‑Shift) tr 'a-z' 'n-za-m' tr 'a-z' 'n-za-m' < text.txt
Mehrere Zeichen gleichzeitig tr 'abc' 'ABC' tr 'abc' 'ABC' < input.txt

Beispiel: $PATH lesbarer machen:

 echo $PATH | tr ':' '\n' | nl

Fazit

  • grep: Zeilen nach Mustern filtern
  • cut: Spalten oder Zeichen ausschneiden.
  • awk: Felder flexibel verarbeiten und berechnen.
  • sed: Ersetzen und transformieren
  • tr: Zeichen umwandeln oder löschen

👉 Zusammengeschaltet mit Pipes (|) werden diese Tools zu einem Schweizer Taschenmesser für Textbearbeitung – schnell, skriptbar und überall verfügbar.


  1. CSV = Comma-Separated Values, kann natürlich auch maskierte Kommas in dem Wert enthalten, was dieser Befehl geflissentlich ignoriert oder falsch macht. Verwendet zum CSV-Parsen also bitte nicht diesen Shell-Befehl. Dieser Befehle sind dafür da, auf der Shell schnell mal in eine Datei hineinzuschauen. Wenn das Ergebnis gut genug ist, kann man es auch weiter verarbeiten.