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:

KlasseBedeutung
[: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.

Verwandte Artikel