tr

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Ein Terminal öffnen

Inhaltsverzeichnis
  1. Installation
  2. Aufruf
  3. Beispiele
  4. Links

Wiki/Icons/terminal.png 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.

Installation

Das Programm ist im Paket

von Ubuntu enthalten und deshalb auf jedem System vorinstalliert.

Aufruf

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.

Beispiele

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