Tr Kommando

Aus Si:Wiki von Siegrist SystemLösungen - Informatik und Rezepte
Wechseln zu: Navigation, Suche
Mit tr können Zeichen ersetzt, komprimiert oder gelöscht werden.


Synopsis:
 tr [option]... SET1 [SET2]


tr akzeptiert zwei Zeichensätze SET1 und SET2, in der Regel mit der gleichen Länge, und ersetzt die Zeichen des ersten Satzes durch die entsprechenden Zeichen des zweiten Satzes.
Ein SET ist im Grunde eine Zeichenkette, einschließlich Sonderzeichen als interpretierte Folgen mit Backslash.


Zeichen ersetzen

$ echo "123abcABC" | tr "abc" "xyz"

oder

$ echo "123abcABC" | tr "a-c" "x-z"
ergibt 123xyzABC

Gross/Klein umwandeln:

$ echo "123abcABC" | tr "a-z" "A-Z"
ergibt 123ABCABC


Mit -c (--complement) Option werden alle Zeichen ausser jenen in SET1 ersetzt:

$ echo "123abcABC" | tr -c "abc" "0"
ergibt 000abc0000

Das überzälige 0 am Schluss ist das unsichtbare \n des echo Kommandos. Es gibt 2 Möglichkeiten das zu verhindern:

$ echo -n "123abcABC" | tr -c "abc" "0"
oder
$ echo "123abcABC" | tr -c "abc\n" "0"
ergibt 000abc000


Zeichen komprimieren -s (--squeeze-repeats)

-s ersetzt eine Folge von wiederholtem Auftreten eines Zeichens durch ein (anderes) Zeichen.

Nur mit SET1 wird das Zeichen in SET1 komprimiert:

$ echo "SI     Wiki" | tr -s " "
ergibt SI Wiki


mit SET1 und SET2 werden die Zeichen aus SET1 komprimiert und mit SET2 ersetzt:

$ echo "SI     Wiki" | tr -s " " ":"
ergibt SI:Wiki


Zeichen löschen -d (--delete)

Alle Vorkommen der Zeichen aus SET1 werden gelöscht.

$ echo "SI     Wiki" | tr -d " i"
ergibt SIWk


Einige Beispiele

Zufallszahl erzeugen

$ tr -cd 0-9 </dev/urandom | head -c 7

Liest aus /dev/urandom, bildet durch Komplement alles Nicht-Zahlen (-c), löscht alle diese Nicht-Zahlen (-d), und gibt die ersten 7 Zeichen (head -c 7) davon aus.


Jedes Wort im Satz auf eine neue Zeile

$ echo "Jedes Wort im Satz auf eine neue Zeile" | tr -cs [:alnum:] "\n"

Sammelt das Komplement (-c) aller alphanumerischen Zeichen und ersetzt und komprimiert diese Menge nicht-alphanumerischer Zeichen durch ein Newline.


Alle leeren Zeilen einer Datei löschen

$ tr -s "\n" < eingabedatei.txt > ausgabedatei.txt

Liest die eingabedatei.txt (<), wandelt alle mehrfach hintereinander vorkommenden Newlines in ein einzelnes Newline (-s) und schreibt das Ergebnis in die ausgabedatei.txt (>).