[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:Terminal:Ein Terminal öffnen] }}} [[Inhaltsverzeichnis(1)]] [[Bild(Wiki/Icons/terminal.png, 48, align=left)]] Der Befehl tr (von '''tr'''anslate = umwandeln oder '''tr'''ansliterate = 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 * '''coreutils''' von Ubuntu enthalten und deshalb auf jedem System vorinstalliert. = Aufruf = Die allgemeine Syntax lautet [1]: {{{#!vorlage Befehl tr OPTION ZEICHENFOLGE1 ZEICHENFOLGE2 }}} `tr` kennt folgende Optionen: {{{#!vorlage Tabelle 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 [:man:Manpage] zu entnehmen. Von `tr` werden folgende Angaben als Befehle interpretiert: {{{#!vorlage Tabelle 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 [:man: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: {{{#!vorlage Befehl echo Maus | tr M H }}} {{{ Haus }}} Mit folgendem Befehl werden Groß- in Kleinbuchstaben umgewandelt: {{{#!vorlage Befehl echo 'FLÜSTERN' | tr A-ZÄÖÜ a-zäöü }}} oder auch {{{#!vorlage Befehl echo 'FLÜSTERN' | tr [:upper:]ÄÖÜ [:lower:]äöü }}} ergibt {{{ flüstern }}} … und umgekehrt: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl tr -d '0-9' < datei.txt }}} Soll aus mehrere aufeinanderfolgenden Leerzeichen ein einzelnes gemacht werden, kann man die Option `-s` verwenden: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl echo 'Die drei ??? treffen die 12 Geschworenen!' | tr -cd '[:alpha:]' > datei }}} {{{#!vorlage Befehl cat datei }}} {{{ DiedreitreffendieGeschworenen }}} Mit Hilfe von tr lässt sich ein Text auch sehr leicht [wikipedia:Rot13:] chiffrieren und dechiffieren: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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 [:Shell/Umleitungen: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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl tr -d '\r' < datei1 > ausgabedatei }}} Alle mehrfach aufeinander folgenden Zeilenumbrüche („new line“) in '''datei1''' werden in jeweils einen umgewandelt: {{{#!vorlage Befehl tr -s '\n' < datei1 > ausgabedatei }}} Der folgende Befehl führt dazu, dass alle kommaseparierten Elemente einer [wikipedia:CSV_(Dateiformat):CSV]-Datei '''datei.csv''' jeweils in einer neuen Zeile erscheinen: {{{#!vorlage Befehl tr ',' '\n' < datei.csv }}} = Links = * [http://www.gnu.org/software/coreutils/ GNU Core Utilities] {en} * [wikipedia_en:Tr_(Unix):tr] * [http://www.prontosystems.org/tux/tr tr: Translate Characters -> Syntax und Beispiele] {de} – Blogartikel 5/2010 * [http://www.easylinux.de/Artikel/ausgabe/2003/11/068-shell-tipps/ Shell-Tipps] {de} – Artikel in EasyLinux 11/2003 * [:Shell/Befehlsübersicht:] {Übersicht} Übersicht über verschiedene Shell-Befehle # tag: Shell