tr — Zeichen übersetzen, löschen und zusammenfassen
Praxis-Guide zu tr — Zeichen aus der Standardeingabe übersetzen, löschen oder zusammenfassen. Der Filter für zeichenweise Transformationen in Pipelines.
tr (translate) ist der Filter für zeichenweise Transformationen in der Shell – er liest von der Standardeingabe, ersetzt, löscht oder fasst einzelne Zeichen zusammen und schreibt das Ergebnis auf die Standardausgabe. Anders als sed arbeitet tr nicht mit Mustern, sondern mit Zeichenmengen: Du gibst eine Quell- und eine Zielmenge an, und tr bildet sie Zeichen für Zeichen aufeinander ab. Mit POSIX-Zeichenklassen wie [:upper:] oder [:digit:] deckst du ganze Gruppen ab, und mit -d, -s und -c löschst, verdichtest oder invertierst du die Auswahl. tr kennt keine Dateinamen – es lebt ausschließlich in der Pipe.
Zeichenübersetzung
tr '<set1>' '<set2>' — Ersetzt Zeichen aus set1 durch die entsprechenden Zeichen in set2.
echo 'hello' | tr 'aeiou' 'AEIOU'tr 'a-z' 'A-Z' — Wandelt Kleinbuchstaben in Großbuchstaben um.
echo 'hello world' | tr 'a-z' 'A-Z'tr 'A-Z' 'a-z' — Wandelt Großbuchstaben in Kleinbuchstaben um.
echo 'HELLO' | tr 'A-Z' 'a-z'tr '[:lower:]' '[:upper:]' — Wandelt Klein- in Großbuchstaben über POSIX-Zeichenklassen um.
cat file.txt | tr '[:lower:]' '[:upper:]'tr '<char>' '<char>' — Ersetzt ein einzelnes Zeichen durch ein anderes.
echo '2024/01/15' | tr '/' '-'tr ' ' '\n' — Ersetzt Leerzeichen durch Zeilenumbrüche (ein Wort pro Zeile).
echo 'one two three' | tr ' ' '\n'tr '\n' ' ' — Ersetzt Zeilenumbrüche durch Leerzeichen (verbindet Zeilen zu einer).
cat list.txt | tr '\n' ' 'tr ',' '\t' — Wandelt Kommas in Tabulatoren um (CSV zu TSV).
cat data.csv | tr ',' '\t' > data.tsvtr '\t' ',' — Wandelt Tabulatoren in Kommas um (TSV zu CSV).
cat data.tsv | tr '\t' ',' > data.csvZeichen löschen
tr -d '<chars>' — Löscht alle Vorkommen der angegebenen Zeichen.
echo 'Hello, World!' | tr -d ',!'tr -d '[:digit:]' — Entfernt alle Ziffern.
echo 'abc123def456' | tr -d '[:digit:]'tr -d '[:alpha:]' — Entfernt alle Buchstaben (behält Ziffern, Satzzeichen usw.).
echo 'abc123def456' | tr -d '[:alpha:]'tr -d '[:space:]' — Entfernt alle Leerraumzeichen (Leerzeichen, Tabs, Zeilenumbrüche).
echo ' hello world ' | tr -d '[:space:]'tr -d '\n' — Entfernt alle Zeilenumbrüche (fügt alle Zeilen zusammen).
cat file.txt | tr -d '\n'tr -d '\r' — Entfernt Wagenrückläufe (korrigiert Windows-Zeilenenden).
cat windows.txt | tr -d '\r' > unix.txttr -d '[:punct:]' — Entfernt alle Satzzeichen.
echo 'Hello, World! How are you?' | tr -d '[:punct:]'Wiederholungen zusammenfassen
tr -s '<chars>' — Fasst wiederholte Zeichen zu einem einzigen zusammen.
echo 'heeello' | tr -s 'e'tr -s ' ' — Reduziert mehrere Leerzeichen auf ein einzelnes.
echo 'too many spaces' | tr -s ' 'tr -s '\n' — Entfernt Leerzeilen (fasst aufeinanderfolgende Zeilenumbrüche zusammen).
cat file.txt | tr -s '\n'tr -s '[:blank:]' — Fasst sämtlichen horizontalen Leerraum zusammen (Leerzeichen und Tabs).
cat messy.txt | tr -s '[:blank:]'tr -s ' ' '\t' — Fasst mehrere Leerzeichen zusammen und wandelt sie in einen einzelnen Tabulator um.
ps aux | tr -s ' ' '\t'Komplement
tr -cd '<chars>' — Löscht alle Zeichen AUSSER den angegebenen.
echo 'abc123def456' | tr -cd '[:digit:]\n'tr -cd '[:alnum:]\n' — Behält nur alphanumerische Zeichen und Zeilenumbrüche.
echo 'Hello, World! #123' | tr -cd '[:alnum:]\n'tr -cd '[:print:]' — Entfernt alle nicht druckbaren Zeichen.
cat binary-mixed.txt | tr -cd '[:print:]\n'tr -c '[:alnum:]' '_' — Ersetzt alle nicht-alphanumerischen Zeichen durch Unterstriche.
echo 'Hello World! @2024' | tr -c '[:alnum:]\n' '_'Zeichenklassen
[:alpha:] — Alle Buchstaben (a-z, A-Z).
tr -d '[:alpha:]'[:digit:] — Alle Ziffern (0-9).
tr -d '[:digit:]'[:alnum:] — Alle Buchstaben und Ziffern.
tr -cd '[:alnum:]'[:upper:] / [:lower:] — Groß- / Kleinbuchstaben.
tr '[:upper:]' '[:lower:]'[:space:] — Alle Leerraumzeichen (Leerzeichen, Tab, Zeilenumbruch usw.).
tr -d '[:space:]'[:blank:] — Nur horizontaler Leerraum (Leerzeichen und Tab).
tr -s '[:blank:]'[:punct:] — Alle Satzzeichen.
tr -d '[:punct:]'[:print:] — Alle druckbaren Zeichen (inklusive Leerzeichen).
tr -cd '[:print:]'Typische Anwendungsfälle
tr -dc 'a-zA-Z0-9' < /dev/urandom | head -c <n> — Erzeugt eine zufällige alphanumerische Zeichenkette aus n Zeichen.
tr -dc 'a-zA-Z0-9' < /dev/urandom | head -c 32; echoecho '<text>' | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | tr -cd '[:alnum:]-' — Erzeugt aus einem Text einen URL-Slug.
echo 'Hello World Blog Post' | tr '[:upper:]' '[:lower:]' | tr ' ' '-'cat <file> | tr -s ' ' '\n' | sort | uniq -c | sort -rn — Worthäufigkeit zählen: Wörter aufteilen, sortieren, zählen, nach Häufigkeit sortieren.
cat article.txt | tr -s ' ' '\n' | sort | uniq -c | sort -rn | head -20echo '<ROT13>' | tr 'A-Za-z' 'N-ZA-Mn-za-m' — Kodiert/dekodiert eine Zeichenkette per ROT13.
echo 'Hello World' | tr 'A-Za-z' 'N-ZA-Mn-za-m'cat <file> | tr -cs '[:alpha:]' '\n' — Extrahiert nur Wörter (eines pro Zeile) und entfernt alle nicht-alphabetischen Zeichen.
cat mixed.txt | tr -cs '[:alpha:]' '\n' Fazit
tr ist klein, schnell und überraschend vielseitig – ideal für Aufgaben wie Groß-/Kleinschreibung umwandeln, Windows-Zeilenenden bereinigen (tr -d '\r'), Whitespace verdichten oder Texte in Wortlisten zerlegen. Denk aber an seine Eigenheiten: tr ersetzt immer Zeichen für Zeichen, niemals ganze Zeichenketten – für mehrstellige Suchen-und-Ersetzen brauchst du sed. Die literalen \n und \t müssen im jeweiligen Argument stehen und werden von tr selbst interpretiert. Mit Multibyte-Zeichen (UTF-8) kommt tr nur eingeschränkt zurecht, weil es byteweise arbeitet; bei Umlauten und Sonderzeichen ist es daher nicht immer die richtige Wahl.
Weiterführende Links
- GNU coreutils: tr – offizielle Referenz mit allen Optionen und Zeichenklassen (englisch)
- ubuntuusers-Wiki: Datenstromtools – deutschsprachige Übersicht zu tr, sed, cut und Co.