Bash tr
Programmieren
© 2016
- 2025
Basiswissen|
tr mit einer pipe|
tr mit einem Redirect|
tr mit doppeltem Redirect|
Optionen von tr|
tr -d|
tr -s|
tr -c|
Probleme, Tricks und Kniffe zu tr|
tr für Groß- und Kleinbuchstaben|
tr und Zeichenklassen (character classes|
tr für verborgenen Zeichen|
Grenzen und Alternativen zu tr|
sed statt tr|
String operators statt tr|
Reguläre Ausdrücke statt tr|
Fußnoten
Basiswissen
Der Befehl tr löscht oder transkribiert einzelne Zeichen in einem Text. Die Abkürzung steht für "transliterate". Dazu stehen hier einige Beispiele.
tr mit einer pipe
Mit tr kann man einzelne Buchstaben oder irgendwelche Zeichen durch einzelne andere Zeichen ersetzen. Das ist die klassische Grundfunktion von tr:
echo hallo | tr a o
Zuerst schreibt der Befehl echo das Wort hallo. Das wird über eine Pipe (Durchleitung) mit dem senkrechten Strich | direkt an den Befehl tr weitergegeben. Der Befehl tr nimmt dann jedes a und ersetzt es durch ein o. Am Ende wird am Bildschirm das Wort "hollo" angezeigt. Zur Durchreichung von Inhalten mit dem senkrechten Strich siehe auch auch Bash pipe ↗
tr mit einem Redirect
Eine ähnliche Wirkung wie in dem Beispiel oben mit der Pipe mit dem senkrechten Strich | erreicht man auch durch ein sogenanntes Redirect mit dem Zeichen <. Ein redirect funktioniert jedoch nur mit Dateien. Man kann das kleiner-Zeichen hinter einen Befehl setzen und nennt dann den Namen einer Datei. Der Inhalt der Datei wird dann in die sogenannte Standardeingabe umgeleitet. Und Befehle wie etwa tr lesen zuerst, was in der Standardeingabe (stdin = standard input) steht:
tr a o < testdatei.txt
Wenn in der Datei testdatei.txt ein Text steht, wird jedes a in dem Text ersetzt durch ein o. Der so umgeschriebene Text wird dann am Bildschirm ausgegeben. Der Inhalt der testdatei.txt selbst wird aber nicht verändert.
tr mit doppeltem Redirect
Wie im Beispiel zuvor mit einem einfachen Redirect von rechts nach links über < (in Richtung Spitze), kann man die Ausgabe auch in eine weitere Datei umleiten, etwa ziel.txt:
tr a o < testdatei.txt > ziel.txt
Zuerst wird der Inhalt von testdatei.txt an tr übergeben. Der Befehl tr ersetzt dann alle kleinen Buchstaben a durch ein kleines o. Das Ergebnis davon wird letztendlich in die Datei ziel.txt geschrieben. Um deren Inhalt anzuzeigen, kann man zum Beispiel cat ziel.txt verwenden.
Optionen von tr
Wie die meisten Befehle unter Bash kann man auch tr mit verschiedenen sogenannten Optionen, das heißt Möglichkeiten, ausführen. Um die Option auszuwählen, fügt man nach dem Befehl ein Minuszeichen direkt gefolgt von einem Buchstaben für die entsprechende Option an. Dazu folgen jetzt einige Beispiele.
tr -d
Mit tr -d kann man einzelne Zeichen löschen. Das kleine d steht für delete, Englisch für löschen oder entfernen:
echo hallihallo | tr -d a
Hier wird am Ende das Wort hllihllo angezeigt. Alle kleinen a's wurden gelöscht. Um Leerzeichen zu löschen, schreibt man: echo hallihallo | tr -d ' '
tr -s
Mit der Option -s kann man hintereinander wiederholte Abfolgen eines Zeichen 'zusammenquetschen' (Englisch squeeze) auf nur ein Zeichen:
echo zoon politikon | tr -s o
Das Wort zoon politikon ist griechisch und heißt so viel wie soziales Tier. Damit ist in der Philosophie der Mensch gemeint, der sich vor allem durch seinen Drang zum Sozialen ausweist. Mit dem tr-Befehl wird hier das doppelte o auf nur ein o zusammengequetscht. Die Ausgabe ist also "zon politikon".
tr -c
Das kleine c steht für complement, was hier so viel wie das logische Gegenteil oder "alles andere als" bedeutet. Man erkennt die Wirkung am besten mit einem kurzen Beispiel:
echo Homo degeneratus | tr -c o i
Der Befehl bedeutet: ersetze jedes Zeichen das kein o ist durch ein i. Die dazu passende korrekte Ausgabe ist dann: ioioiiiiiiiiiiiii. Siehe mehr dazu unter Komplement ↗
Probleme, Tricks und Kniffe zu tr
Weil der Befehl tr so gut nachvollziehbar ist, kann man mit ihm sehr hilfreiche Konzepte von Bash kennen lernen, die auch mit anderen Befehlen oft die Arbeit enorm erleichter können. Einige sind jetzt kurz vorgestellt.
tr für Groß- und Kleinbuchstaben
Oft möchte man alle Großbuchstaben umwandeln in Kleinbuchstaben, oder umgekehrt. Beides geht mit tr auf einfach eWeise:
echo FitzGerald | tr [:upper:] [:lower:]
echo FitzGerald | tr [:lower:] [:upper:]
Die erste Zeile erzeugt fitzgerald. Die zweite Zeile gibt FITZGERALD.
tr und Zeichenklassen (character classes
Es gibt unter Bash fest definierte Klassen von Zeichen, etwa: alle Großbuchstaben oder alle Zahlen. Damit kann man Zeichen von einer Klasse umwandeln in Zeichen einer anderen Klasse:
echo RheinMetall | tr [:upper:] [:lower:]
In dem Beispiel wird in dem Namen des deutschen Rüstungskonzern Rheinmetall jeder groß geschriebene Buchstabe in einen klein geschriebenen Buchstaben umgewandelt. Erlaubte Zeichenklassen sind: "alnum", "alpha", "ascii", "blank", "cntrl", "digit", "graph", "lower", "print", "punct", "space", "upper", "word" or "xdigit".[2]
tr für verborgenen Zeichen
Textdateien enthalten oft Zeichen, die von Editoren und Textbearbeitungsprogrammen nicht angezeigt werden werden. Man spricht von verborgenen Zeichen, im Englischen hidden characters oder auch Steuerzeichen. Solche verborgenen Zeichen markieren innerhalb einer Textdatei etwa, wo ein Zeilenumbrung oder ein Tabulator gesetzt werden sollen. Diese unsichtbaren Zeichen kann man in tr direkt ansprechen:
tr -d 'n' < testdatei.txt
Die Option -d sagt tr, dass alle versteckten Steuerzeichen der Art "n" gelöscht werden sollen. Das Steuerzeichen n steht für Newline und bewirkt einen Zeilenumbruch. Die mit einem redirect an tr übergebene Datei testdatei.txt hat am Ende also keine Zeilenumbrüche mehr. Der gesamte Text wird in einem durchgehenden Absatz dargestellt. Einige wichtige Steuerzeichen unter Bash sind:
- " = double quote
- \ = backslash
- a = alert (BEL)
- b = backspace
- c = produce no further output
- e = escape
- f = form feed
- n = new line
- r = carriage return
- t = horizontal tab
- v = vertical tab
Ein wichtiger Hinweis zur Verwendung dieser Steuerzeichen ist, dass der Befehl echo unter Bash sie nicht zuverlässig benutzt. Speziell für die Benutzung dieser Steuerzeichen geschrieben wurde der Befehl Bash printf ↗
Grenzen und Alternativen zu tr
sed statt tr
Mit dem Befehl tr kann man immer nur einzelne Zeichen durch andere einzelne Zeichen ersetzen. Es ist mit tr nich t möglich, eine Gruppe von Zeichen, eine sogenannte Zeichenfolge, wie etwa das griechische Wort Hyle durch eine andere Zeichenfolge, wie etwa das deutsche Wort Urstoff zu ersetzen. Dazu verwendet man einen anderen Befehl:
echo Am Anfang gabe es nur Hyle. | sed 's/Hyle/Urstoff/g'
Hier erzeugt der Befehl sed die Ausgabe: Am Anfang gab es nur Urstoff. Der Befehl sed ist sehr viel umfangreicher als tr. Es gibt ganze Bücher, die sed beschreiben. Siehe mehr unter Bash sed ↗
String operators statt tr
Eine weitere Alternative sind die sogenannten String operators. Sie verändern nicht den Inhalt von Dateien oder Asgaben anderer Befehle sondern den Inhalt einer Variablen. String ist Englisch für Zeichenkette. String Operators verändern Zeichenketten, genau, wie tr, bearbeiten aber den Inhalt von Variablen. Betrachten wir ein kleines Beispiel:
g=9,88
echo ${g/88/81}
In der ersten Zeile hat die Variable g für die Erdfallbeschleunigung den (falschen) Wert 9,88 zugewiesen bekommen. In der zweiten Zeile wird der Inhalt von g mit echo ausgegeben. Aber in den geschwungenen Klammern wird gleichzeitig bestimmt, dass aus der Zeichenfolge 88 die Zeichenfolge 81 gemacht werden soll. Die endgültige Ausgabe ist also der für die Erde korrekte Mittelwert für die Erdfallbeschleunigung, nämlich 9,81. Mit den String operators lassen sich noch sehr viel mehr Veränderungen vornehmen. Viele nützliche Hinweise findet man dazu unter dem Stichwort "Pattern Matching". Siehe mehr dazu unter Bash string operators ↗