Mit dem tr
-Befehl können wir bestimmte Zeichen durch andere ersetzen oder sie einfach aus dem Text entfernen. Diese Funktionen sind nützlich, um Textmanipulationen durchzuführen oder bestimmte Formatierungen zu ändern.
Syntax
tr [OPTION]... SET1 [SET2]
Hierbei steht SET1
für die zu ersetzenden Zeichen und SET2
für die Zeichen, die anstelle von SET1
eingesetzt werden sollen. Beachte, dass SET2
optional ist. Wenn SET2
nicht angeben, wird tr
die Zeichen in SET1
einfach löschen.
Einige häufig verwendete Optionen sind:
-d
oder--delete
: Löscht Zeichen aus dem Text.-s
oder--squeeze-repeats
: Reduziert aufeinanderfolgende identische Zeichen zu einem einzigen Zeichen.-c
oder-C
oder--complement
: Ersetzt alle Zeichen außer den angegebenen Zeichen.-t
oder--truncate-set1
: Begrenzt den Übersetzungsvorgang auf die Länge vonSET1
.
In den meisten Fällen repräsentieren die Zeichen sich selbst. Es gibt jedoch einige interpretierte Folgen, die eine spezielle Bedeutung haben (u.a. Steuerzeichen oder Zeichenklassen). Hier sind einige der häufig verwendeten Steuerzeichen:
\n
: Steht für eine neue Zeile (en. new line).\r
: Steht für „Wagenrücklauf“ (en. carriage return).\t
: Steht für einen Tabulator (en. Tab).ZEICH1-ZEICH2
: Steht für alle Zeichen von ZEICH1 bis ZEICH2 in aufsteigender Reihenfolge.
Hier sind einige der häufig verwendeten Zeichenklassen:
[:alnum:]
: Steht für alle Buchstaben und Ziffern.[:alpha:]
: Steht für alle Buchstaben.[:blank:]
: Steht für alle horizontalen Leerzeichen/Tabulatoren.[:cntrl:]
: Steht für alle Steuerzeichen.[:digit:]
: Steht für alle Ziffern.[:lower:]
: Steht für alle Kleinbuchstaben.[:space:]
: Steht für alle horizontalen oder vertikalen Leerzeichen/Tabulatoren.[:upper:]
: Steht für alle Großbuchstaben.
Beispiele
Überschreiben von Zeichen
$ echo "Hello, World!" | tr 'o' 'x'
Hellx, Wxrld!
$
In diesem Beispiel wird das Zeichen o
durch das Zeichen x
ersetzt.
Löschen von Zeichen
Der tr
-Befehl kann auch verwendet werden, um bestimmte Zeichen aus einem Textstrom zu entfernen, mit der Option -d
.
$ echo "Hello, World!" | tr -d 'l'
Heo, Word!
$
In diesem Beispiel wird das Zeichen l
aus dem Textstrom entfernt, wodurch nur Heo, Word!
zurückbleibt.
Kleinbuchstaben in Großbuchstaben umzuwandeln oder umgekehrt
Um Kleinbuchstaben in Großbuchstaben umzuwandeln oder umgekehrt können wir SET
-folgen verwenden oder Zeichenklassen:
$ echo "Hello, World!" | tr 'a-z' 'A-Z'
HELLO, WORLD!
$
Hier wird a-z
für SET1
und A-Z
für SET2
verwendet. Der tr
-Befehl durchsucht den Textstrom nach Kleinbuchstaben (a
bis z
) und ersetzt sie durch die entsprechenden Großbuchstaben (A
bis Z
).
$ echo "Hello, World!" | tr '[:lower:]' '[:upper:]'
HELLO, WORLD!
$
Hier werden die Zeichenklassen [:lower:]
und [:upper:]
verwendet, um alle Kleinbuchstaben in der Eingabezeichenkette in Großbuchstaben umzuwandeln. Der tr
-Befehl sucht nach Zeichen, die zur Klasse [:lower:]
gehören, und ersetzt sie durch die entsprechenden Zeichen aus der Klasse [:upper:]
.
Löschen von Steuerzeichen
Steuerzeichen sind nicht druckbare Zeichen wie Tabulatoren (\t
) oder Zeilenumbrüche (\n
).
$ echo -e "Hello\tWorld\n"
Hello World
$ echo -e "Hello\tWorld\n" | tr -d '\t\n'
HelloWorld
$
Links
- https://linuxhint.com/linux_tr_command/ Eine umfassende Anleitung zum
tr
-Befehl in Linux mit Beispielen. - https://wiki.ubuntuusers.de/tr/ Dokumentation des
tr
-Befehls in Ubuntu Linux. - https://de.wikipedia.org/wiki/Tr_(Unix) Artikel über den
tr
-Befehl in Unix. - https://linuxcommand.org/lc3_man_pages/tr1.html Linux-Befehlsreferenz für den
tr
-Befehl.
Hallo,
wie kann ich mit tr oder ähnlichen Möglichkeiten in einer beliebigen Textdatei eine ausgewählte Anzahl von Zeilen von Steuerzeichen befreien?
Vielen Dank im Voraus
Moin,
du kannst
sed
verwenden, um gezielt Steuerzeichen in einer bestimmten Anzahl von Zeilen zu entfernen. z.B.:sed '1,10 s/[^[:print:]]//g' datei.txt
– Der Befehl entfernt in den Zeilen 1 bis 10 alle Steuerzeichen, die nicht druckbar sind.Wenn du nur
tr
verwenden möchtest, wäre das folgende eine Alternative:head -n 10 datei.txt | tr -d '[:cntrl:]'
– Hier werden Steuerzeichen aus den ersten 10 Zeilen entfernt.Falls du nur eine bestimmte Anzahl von Zeilen bearbeiten willst, passt du die Befehle einfach entsprechend an.
Gruß Chris