Der Befehl tr
In diesem Beitrag lernen Sie den Befehl tr (translate) kennen, welcher unter Linux- / UNIX-Betriebssystemen der systematischen Ersetzung von Zeichen durch andere Zeichen in Texten dient. Beispiele für die mit tr durchführbaren Aufgaben sind die Ersetzung aller Großbuchstaben in einem Text durch die entsprechenden Kleinbuchstaben, oder die Ersetzung mehrerer aufeinanderfolgender, zusätzlicher Leerzeichen durch ein einzelnes.
Da der Befehl Teil des essenziellen Pakets coreutils ist, ist er auf den meisten Systemen bereits vorinstalliert.
Allgemeine Syntax
Die allgemeine Syntax des Befehls tr lautet:
tr [Optionen] [Zeichenkette 1] [Zeichenkette 2]
Standardmäßig werden Zeichen aus dem Standard-Input stdin gelesen, verarbeitet und schließlich in die Standard-Ausgabe stdout geschrieben. In der ersten Zeichenkette stehen die im Eingabetext zu ersetzenden Zeichen, während in der zweiten Zeichenkette die Zeichen stehen, mit denen ersetzt wird. Die Zuordnung von Quell- zu Zielzeichen erfolgt nach der Reihenfolge, in der die Zeichen angegeben werden. Das heißt, dass jeweils immer das n-te Zeichen aus Zeichenkette 1 auf das n-te Zeichen in Zeichenkette 2 abgebildet wird. Falls in Zeichenkette 2 weniger Zeichen enthalten sind, als in Zeichenkette 1, so werden die Zeichen aus Zeichenkette 1, die nicht direkt über ihre Position auf ein Zielzeichen abbildbar sind, stets durch das letzte Zeichen aus Zeichenkette 2 ersetzt. Zusätzliche Zeichen in der Zeichenkette 2 werden ignoriert.
Während die meisten Zeichen jeweils für sich selbst stehen, gibt es auch einige interpretierte Folgen. Dazu gehören einerseits einige mit dem Rückschrägstrich angegebene Escape-Sequenzen, die jeweils ein Zeichen darstellen:
Sequenz | Funktion |
---|---|
\NNN | Zeichen mit Oktalwert NNN. Es können ein bis drei oktale Ziffern angegeben werden. |
\\ | Rückschrägstrich |
\a | Hörbarer Ton |
\b | Backspace |
\f | Seitenvorschub |
\n | Zeilenumbruch |
\r | Wagenrücklauf |
\t | Horizontaler Tabulator |
\v | Vertikaler Tabulator |
Weiterhin gibt es jedoch auch komplexere Folgen, die der Darstellung ganzer Zeichenmengen dienen. Sofern im Folgenden nicht explizit angegeben, gibt es keine Garantie, dass eine Folge in aufsteigender Reihenfolge expandiert wird:
Folge | Funktion |
---|---|
ZEICHEN1-ZEICHEN2 | Alle Zeichen von ZEICHEN1 bis ZEICHEN2 in aufsteigender Reihenfolge. |
[ZEICHEN*] | Wird in der Zeichenkette 1 verwendet und stellt so viele Kopien des Zeichens ZEICHEN dar, wie sie bis zum Erreichen der Länge von Zeichenkette 2 nötig sind. |
[ZEICHEN*N] | Stellt eine Anzahl N Kopien des Zeichens ZEICHEN dar. Die Anzahl N ist oktal, wenn sie mit 0 beginnt. |
[:alnum:] | Alle Buchstaben und Ziffern. |
[:alpha:] | Alle Buchstaben. |
[:blank:] | Alle horizontalen Leerräume (Whitespaces). |
[:cntrl:] | Alle Steuerzeichen. |
[:digit:] | Alle Ziffern. |
[:graph:] | Alle druckbaren Zeichen, ohne Leerzeichen. |
[:lower:] | Alle Kleinbuchstaben, in aufsteigender Reihenfolge. |
[:print:] | Alle druckbaren Zeichen, einschließlich Leerzeichen. |
[:punct:] | Alle Satzzeichen. |
[:space:] | Alle horizontalen oder vertikalen Leerräumen (Whitespaces). |
[:upper:] | Alle Großbuchstaben, in aufsteigender Reihenfolge. |
[:xdigit:] | Alle hexadezimalen Ziffern. |
[=ZEICHEN=] | Alle Zeichen, die äquivalent zum Zeichen ZEICHEN sind. |
Beispiel: tr ohne Optionen (1)
In diesem Beispiel wird tr ohne Optionen verwendet, um alle Vorkommnisse eines einzelnen Zeichens in einem Text durch ein anderes Zeichen zu ersetzen.
Eingabe:
Der Befehl echo liefert in diesem Fall eine Zeichenkette, in denen Kommata "," der Trennung mehrerer Namen dienen. Die Kommata sollen mithilfe von tr durch Zeilenumbrüche "\n" ersetzt werden.
echo "admina,hedv,hellberg" | tr "," "\n"
Ausgabe:
In der Ausgabe sind die Namen nun zeilenweise zu sehen.
admina
hedv
hellberg
Beispiel: tr ohne Optionen (2)
Auch dieses Beispiel setzt tr ohne Optionen ein. In diesem Fall werden jedoch mehrere verschiedene Ersetzungen von einem Befehl durchgeführt.
Eingabe:
In einer Zeichenkette sollen diesmal alle Kommata "," durch Semikola ";" sowie die beiden Großbuchstaben "T" und "K" jeweils durch ihre entsprechenden Kleinbuchstaben ersetzt werden.
echo "Kermit,Tiffy" | tr ",TK" ";tk"
Ausgabe:
Erwartungsgemäß sind die Anfangsbuchstaben der beiden Namen nun klein und das Komma wurde durch ein Semikolon ersetzt.
kermit;tiffy
Beispiel: tr ohne Optionen (3)
Hier wird einmal die Verwendung von interpretierten Folgen zur Ersetzung aller Kleinbuchstaben in einem Text durch Großbuchstaben gezeigt.
Eingabe:
echo "EDV-Beratung" | tr "[:lower:]" "[:upper:]"
Ausgabe:
In der Ausgabe ist die ursprüngliche Zeichenkette nun vollständig in Großbuchstaben zu lesen.
EDV-BERATUNG
Wichtige Optionen
Die wichtigsten Optionen des Befehls tr werden im Folgenden vorgestellt.
-c - Komplement verwenden
Wird die Option -c angegeben, so verwendet tr das Komplement der Zeichenkette 1 für die Suche nach zu ersetzenden Zeichen.
tr -c [Zeichenkette 1] [Zeichenkette 2]
-d - Zeichen löschen
Mithilfe der Option -d ist es möglich, Zeichen nicht zu ersetzen, sondern diese stattdessen zu löschen. Es wird keine Zeichenkette 2 angegeben.
tr -d [Zeichenkette 1]
-s - Wiederholungen ersetzen
Unter Verwendung der Option -s ersetzt tr jeweils beliebig lange Wiederholungen einzelner Zeichen aus der Zeichenkette 1 durch ein einziges entsprechendes Zeichen.
tr -s [Zeichenkette 1] [Zeichenkette 2]
-t - Zeichenkette 1 auf Zeichenkette 2 kürzen
Die Option -t sorgt dafür, dass zu Beginn die Länge der Zeichenkette 1 auf die Länge von Zeichenkette 2 angepasst wird, indem überschüssige Zeichen vom Ende der Zeichenkette 1 abgeschnitten werden. Verwendbar ist die Option nur bei der Umwandlung, also nicht beim Löschen.
tr -s [Zeichenkette 1] [Zeichenkette 2]
Abonniere JETZT unseren Newsletter!
Verpasse nie wieder neue Beiträge und exklusive Insider-Only-Inhalte!