Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
Der Befehl tr (von translate = umwandeln oder transliterate = transliterieren) dient dazu, in Texten systematisch Zeichen durch andere Zeichen zu ersetzen. So ist es beispielweise möglich, alle Großbuchstaben einer Datei durch Kleinbuchstaben zu ersetzen oder mehrere aufeinander folgende Leerzeichen durch ein einziges zu ersetzen.
Für komplexere Ersetzungen, z.B. für ganze Wörter, empfiehlt sich das wesentlich mächtigere sed.
Das Programm ist im Paket
coreutils
von Ubuntu enthalten und deshalb auf jedem System vorinstalliert.
Die allgemeine Syntax lautet [1]:
tr OPTION ZEICHENFOLGE1 ZEICHENFOLGE2
tr
kennt folgende Optionen:
Optionen von tr | |
Option | Beschreibung |
-c , -C oder --complement | Komplement der angegebenen Zeichenfolge |
-d oder --delete | Löschen (nicht Ersetzen) von Zeichen |
-s oder --squeeze-repeats | Mehrere identische aufeinanderfolgende Zeichen durch ein einzelnes ersetzen |
-t oder --truncate-set1 | Beschneide zunächst den ersten Datensatz auf die Länge des zweiten Datensatzes |
Weitere Optionen sind der Manpage zu entnehmen.
Von tr
werden folgende Angaben als Befehle interpretiert:
Von tr interpretierte Befehlssequenzen | |
Option | Beschreibung |
\\ | Backslash |
\b | Rücktaste |
\n | Zeilenumbruch |
\t | Horizontaler Tab |
ZEICHEN1-ZEICHEN 2 | Alle Zeichen von ZEICHEN 1 bis ZEICHEN2 |
[:alpha:] | Alle Buchstaben |
[:blank:] | Alle horizontalen Leerzeichen |
[:digit:] | Alle Zahlen |
[:lower:] | Alle Kleinbuchstuben |
[:upper:] | Alle Großbuchstaben |
Weitere Angaben sind der Manpage zu entnehmen. Man beachte, dass die Zsh die eckigen Klammern z.B. in [:blank:]
als Wildcard-Parameter interpretiert und sie daher nicht an tr
weitergibt. Benutzer der Zsh sollten solche Argument daher in einfache oder doppelte Anführungszeichen einschließen.
Ein einfaches Beispiel ist das Ersetzen eines Buchstabens durch einen anderen:
echo Maus | tr M H
Haus
Mit folgendem Befehl werden Groß- in Kleinbuchstaben umgewandelt:
echo 'FLÜSTERN' | tr A-ZÄÖÜ a-zäöü
oder auch
echo 'FLÜSTERN' | tr [:upper:]ÄÖÜ [:lower:]äöü
ergibt
flüstern
… und umgekehrt:
echo 'schreien' | tr a-zäöü A-ZÄÖÜ
SCHREIEN
Bestimmte Zeichen, hier alle Zahlen in der Datei datei.txt, lassen sich mit der Option -d
löschen:
tr -d '0-9' < datei.txt
Soll aus mehrere aufeinanderfolgenden Leerzeichen ein einzelnes gemacht werden, kann man die Option -s
verwenden:
echo 'd b' |tr -s ' '
d b
Um alle Zeichen zu entfernen, die nicht einer bestimmten Zeichengruppe angehören, kann die Option -c
benutzt werden. Im folgenden Beispiel werden alle Zeichen entfernt, die keine Buchstaben sind:
echo 'Die drei ??? treffen die 12 Geschworenen!' | tr -cd '[:alpha:]' > datei
cat datei
DiedreitreffendieGeschworenen
Mit Hilfe von tr lässt sich ein Text auch sehr leicht Rot13 chiffrieren und dechiffieren:
echo 'Morgen bringen wir Cäsar um' | tr [a-zA-Z] [n-za-mN-ZA-M]
Zbetra oevatra jve Päfne hz
Und wieder zurück:
echo 'Zbetra oevatra jve Päfne hz' | tr [a-zA-Z] [n-za-mN-ZA-M]
Morgen bringen wir Cäsar um
Um in einer Datei Zeichen zu ändern und das Ergebnis in eine zweite Datei zu schreiben, können Umleitungen eingesetzt werden. Mit dem folgenden Befehl werden alle Vorkommen des Buchstabens a in datei1 in den Buchstaben b umgewandelt und das Ergebnis in datei2 geschrieben:
tr a b < datei1 > datei2
Der folgende Befehl entfernt alle Wagenrückläufe („Carriage Return“, mehr unter Zeichensatz-Konverter) und konvertiert so eine Datei datei1 vom Windows- in das Unixformat:
tr -d '\r' < datei1 > ausgabedatei
Alle mehrfach aufeinander folgenden Zeilenumbrüche („new line“) in datei1 werden in jeweils einen umgewandelt:
tr -s '\n' < datei1 > ausgabedatei
Der folgende Befehl führt dazu, dass alle kommaseparierten Elemente einer CSV-Datei datei.csv jeweils in einer neuen Zeile erscheinen:
tr ',' '\n' < datei.csv
tr: Translate Characters -> Syntax und Beispiele – Blogartikel 5/2010
Shell-Tipps – Artikel in EasyLinux 11/2003
Shell/Befehlsübersicht Übersicht über verschiedene Shell-Befehle
Diese Revision wurde am 12. September 2012 20:01 von aasche erstellt.