Linux: tr
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.