Der Befehl tr ersetzt, löscht oder komprimiert Zeichen aus der Standardeingabe und gibt das Ergebnis auf die Standardausgabe aus. Er wird häufig in Kombination mit anderen Befehlen über Pipes verwendet.
Syntax
tr [OPTION]... SET1 [SET2]
SET1- Die Zeichen, die ersetzt oder gelöscht werden sollen.SET2- Die Zeichen, durch die ersetzt wird (optional, je nach Operation).
Ein SET ist eine Zeichenkette, die einzelne Zeichen oder Zeichenbereiche enthalten kann. Spezielle Zeichen gibst du mit Backslash-Sequenzen an (z.B. \n für Zeilenumbruch).
Zeichen ersetzen
In der einfachsten Anwendung ersetzt tr jedes Zeichen aus SET1 durch das entsprechende Zeichen aus SET2:
echo 'kommandozeile' | tr 'aei' 'xyz'
Hier wird a durch x, e durch y und i durch z ersetzt.
Zeichenbereiche verwenden
Anstatt einzelne Zeichen aufzulisten, kannst du Bereiche mit einem Bindestrich definieren:
echo 'kommandozeile' | tr 'a-z' 'A-Z'
Dieser Befehl wandelt alle Kleinbuchstaben in Großbuchstaben um. Die Kurzform a-z entspricht abcdefghijklmnopqrstuvwxyz.
Zeichenklassen
Für häufige Zeichengruppen bietet tr vordefinierte Klassen:
| Klasse | Bedeutung |
|---|---|
[:lower:] | Kleinbuchstaben |
[:upper:] | Großbuchstaben |
[:digit:] | Ziffern 0-9 |
[:alpha:] | Alle Buchstaben |
[:alnum:] | Buchstaben und Ziffern |
[:space:] | Leerzeichen und Whitespace |
echo 'kommandozeile.org' | tr '[:lower:]' '[:upper:]'
Ausgabe:
KOMMANDOZEILE.ORG
Wichtige Optionen
Zeichen löschen mit -d
Die Option -d (--delete) entfernt alle Zeichen aus SET1:
echo 'kommandozeile.org' | tr -d 'aeiou'
Dieser Befehl entfernt alle Vokale. Die Ausgabe lautet:
kmmndzzl.rg
Komplement mit -c
Die Option -c (--complement) kehrt SET1 um und wirkt auf alle Zeichen, die nicht in SET1 enthalten sind:
echo "Telefon: 0123-456789" | tr -cd '[:digit:]'
Hier werden alle Zeichen entfernt, die keine Ziffern sind. Das Ergebnis:
0123456789
Wiederholungen zusammenfassen mit -s
Die Option -s (--squeeze-repeats) fasst aufeinanderfolgende identische Zeichen zu einem einzigen zusammen:
echo "zu viele Leerzeichen" | tr -s ' '
Ausgabe:
zu viele Leerzeichen
Du kannst -s auch mit einer Ersetzung kombinieren:
echo "zu viele Leerzeichen" | tr -s ' ' '_'
Hier werden mehrfache Leerzeichen durch einen einzelnen Unterstrich ersetzt.
SET1 kürzen mit -t
Wenn SET1 länger als SET2 ist, verwendet tr standardmäßig das letzte Zeichen von SET2 für alle übrigen Zeichen. Die Option -t (--truncate-set1) schneidet SET1 stattdessen auf die Länge von SET2 ab:
echo 'abcde' | tr 'abcde' '12'
Ohne -t wird c, d und e jeweils durch 2 ersetzt (das letzte Zeichen von SET2).
echo 'abcde' | tr -t 'abcde' '12'
Mit -t werden nur a und b ersetzt. Die übrigen Zeichen bleiben unverändert.
Praktische Beispiele
Groß- und Kleinschreibung umwandeln
Kleinbuchstaben in Großbuchstaben:
echo 'linux' | tr 'a-z' 'A-Z'
Großbuchstaben in Kleinbuchstaben:
echo 'LINUX' | tr 'A-Z' 'a-z'
Wörter auf separate Zeilen ausgeben
echo 'GNU ist ein Betriebssystem' | tr -cs '[:alnum:]' '\n'
Alle nicht-alphanumerischen Zeichen werden durch Zeilenumbrüche ersetzt, und aufeinanderfolgende Zeilenumbrüche werden zusammengefasst:
GNU
ist
ein
Betriebssystem
PATH-Variable lesbar formatieren
Die Umgebungsvariable $PATH enthält Verzeichnisse, getrennt durch Doppelpunkte. So gibst du jedes Verzeichnis in einer eigenen Zeile aus:
echo $PATH | tr ':' '\n'
Leerzeilen aus einer Datei entfernen
tr -s '\n' < eingabe.txt > ausgabe.txt
Mehrfache aufeinanderfolgende Zeilenumbrüche werden zu einem einzigen zusammengefasst.
Windows-Zeilenumbrüche entfernen
Windows verwendet \r\n als Zeilenumbruch, Linux nur \n. So entfernst du die überflüssigen Carriage Returns:
tr -d '\r' < windows.txt > linux.txt
Optionen kombinieren
Du kannst mehrere Optionen zusammen verwenden. Der folgende Befehl kombiniert -c und -s:
echo 'Linux ize' | tr -cs 'i' '0'
Alle Zeichen außer i werden durch 0 ersetzt, und aufeinanderfolgende Nullen werden zusammengefasst:
0i0i0
Zusammenfassung
Der Befehl tr ersetzt, löscht oder komprimiert einzelne Zeichen aus Textströmen. Er eignet sich für einfache Zeichenoperationen wie Groß-/Kleinschreibung, das Entfernen bestimmter Zeichen oder das Zusammenfassen von Wiederholungen.
Für komplexere Textmanipulationen mit Mustern oder ganzen Zeichenketten verwendest du besser sed oder awk.