Linux: tr

13. Juli 2025

Das tr-Kommando (translate) ist ein essenzielles Tool zur Textverarbeitung in Unix-ähnlichen Systemen. Es ermöglicht das Übersetzen, Löschen und Komprimieren von Zeichen aus der Standardeingabe und gibt das Ergebnis auf der Standardausgabe aus.

Installation und Verfügbarkeit

# Ubuntu/Debian
sudo apt update
sudo apt install coreutils

# macOS (bereits vorinstalliert)
# Bei Bedarf über Homebrew aktualisieren:
brew install coreutils

Das tr-Kommando ist standardmäßig auf allen Unix-ähnlichen Systemen verfügbar und Teil der GNU Coreutils.

Wichtige Parameter

  • -d – Zeichen löschen (delete)
  • -s – Aufeinanderfolgende Zeichen komprimieren (squeeze)
  • -c – Komplement verwenden: alle Zeichen außer den angegebenen bearbeiten
  • -t – SET1 auf die Länge von SET2 kürzen (truncate)

Komplement-Modus (-c): Die Option -c kehrt das Verhalten von tr um. Anstatt die in SET1 angegebenen Zeichen zu bearbeiten, werden alle anderen Zeichen bearbeitet. Beispiel: tr -cd '[:alpha:]' löscht alle Zeichen außer Buchstaben.

Häufige Anwendungsfälle

Groß-/Kleinschreibung konvertieren

# Kleinbuchstaben zu Großbuchstaben
echo "hello world" | tr 'a-z' 'A-Z'
# Output: HELLO WORLD

# Großbuchstaben zu Kleinbuchstaben
echo "HELLO WORLD" | tr 'A-Z' 'a-z'
# Output: hello world

# Verwendung vordefinierter Zeichenklassen
echo "Hello World" | tr '[:lower:]' '[:upper:]'
# Output: HELLO WORLD

Zeichen löschen

# Leerzeichen entfernen
echo "hello world" | tr -d ' '
# Output: helloworld

# Ziffern entfernen
echo "abc123def456" | tr -d '0-9'
# Output: abcdef

# Mehrere Zeichen gleichzeitig löschen
echo "hello@world#test" | tr -d '@#'
# Output: helloworldtest

Zeichen komprimieren

# Mehrfache Leerzeichen zu einem reduzieren
echo "hello    world" | tr -s ' '
# Output: hello world

# Aufeinanderfolgende Ziffern komprimieren
echo "111222333" | tr -s '0-9'
# Output: 123

Zeichen ersetzen

# Leerzeichen durch Unterstriche ersetzen
echo "hello world test" | tr ' ' '_'
# Output: hello_world_test

# Zeilenumbrüche durch Leerzeichen ersetzen
cat file.txt | tr '\n' ' '

# Tabs durch Leerzeichen ersetzen
cat file.txt | tr '\t' ' '

Zeichenklassen und Escape-Sequenzen

Vordefinierte Zeichenklassen

[:alnum:]    # Alphanumerische Zeichen
[:alpha:]    # Alphabetische Zeichen
[:blank:]    # Leerzeichen und Tabs
[:digit:]    # Ziffern 0-9
[:lower:]    # Kleinbuchstaben
[:upper:]    # Großbuchstaben
[:punct:]    # Satzzeichen
[:space:]    # Whitespace-Zeichen

Escape-Sequenzen

\n          # Newline
\t          # Tab
\r          # Carriage Return
\b          # Backspace
\f          # Form Feed
\v          # Vertical Tab
\\          # Backslash

Erweiterte Optionen

Komplement-Modus (-c)

# Alle Zeichen außer Buchstaben löschen
echo "hello123world!" | tr -cd '[:alpha:]'
# Output: helloworld

# Alle Zeichen außer Ziffern löschen
echo "price: $19.99" | tr -cd '[:digit:]'
# Output: 1999

Truncate-Modus (-t)

# SET1 auf die Länge von SET2 kürzen
echo "hello" | tr -t 'aeiou' '12'
# Ersetzt nur 'a' durch '1' und 'e' durch '2'

Praktische Beispiele

Dateinamen normalisieren

# Leerzeichen und Sonderzeichen in Dateinamen ersetzen
filename="My File (2023).txt"
normalized=$(echo "$filename" | tr ' ()' '___')
echo "$normalized"
# Output: My_File__2023_.txt

CSV-Dateien verarbeiten

# Kommas durch Pipes ersetzen
cat data.csv | tr ',' '|'

# Anführungszeichen entfernen
cat data.csv | tr -d '"'

Hexadezimal-Darstellung

# Binärdaten in hexadezimaler Form anzeigen
cat binaryfile | tr -d '\0' | xxd

Log-Dateien bereinigen

# Steuerzeichen aus Log-Dateien entfernen
cat logfile.log | tr -cd '[:print:]\n\t'

Kombinationen mit anderen Tools

Mit sed und awk

# Mehrere Transformationen in einer Pipeline
cat file.txt | tr '[:upper:]' '[:lower:]' | sed 's/old/new/g'

# Wörter zählen nach Normalisierung
cat text.txt | tr -s ' ' | tr ' ' '\n' | wc -l

Mit grep

# Zeilen mit bestimmten Zeichen finden
cat file.txt | tr -cd '[:alnum:]\n' | grep -v '^$'

Performance-Überlegungen

Das tr-Kommando ist hochoptimiert und eignet sich für große Datenmengen:

# Große Dateien effizient verarbeiten
tr '[:lower:]' '[:upper:]' < large_file.txt > output.txt

# In Pipelines verwenden
gunzip -c archive.gz | tr -d '\r' | gzip > cleaned.gz

Häufige Fehlerquellen

Falsche Zeichenklassen-Syntax

# Falsch
echo "test" | tr [a-z] [A-Z]

# Richtig
echo "test" | tr '[a-z]' '[A-Z]'

Ungleiche Set-Längen

# Problematisch: SET2 ist kürzer als SET1
echo "abcdef" | tr 'abcdef' '123'
# Das letzte Zeichen von SET2 wird wiederholt

# Lösung: -t Option verwenden
echo "abcdef" | tr -t 'abcdef' '123'

Fazit

Das tr-Tool stellt eine leistungsstarke und effiziente Methode zur Zeichenmanipulation dar. Die einfache Syntax ermöglicht komplexe Texttransformationen in einer einzigen Zeile. Besonders in Kombination mit anderen Unix-Tools entfaltet tr seine volle Stärke bei der Datenverarbeitung und -bereinigung.