Tr Kommando: Unterschied zwischen den Versionen

Aus Si:Wiki von Siegrist SystemLösungen - Informatik und Rezepte
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: « : Mit <code> tr </code> können Zeichen ersetzt, komprimiert oder gelöscht werden. Synopsis: <syntaxhighlight lang="bash"> tr [option]... SET1 [SET2] </s…»)
 
K
Zeile 10: Zeile 10:
  
 
: Ein SET ist im Grunde eine Zeichenkette, einschließlich Sonderzeichen als interpretierte Folgen mit Backslash.  
 
: Ein SET ist im Grunde eine Zeichenkette, einschließlich Sonderzeichen als interpretierte Folgen mit Backslash.  
 +
 +
  
 
==== Zeichen ersetzen ====
 
==== Zeichen ersetzen ====
: <syntaxhighlight lang="bash">echo "123abcABC" | tr "abc" "xyz" </syntaxhighlight>
+
: <syntaxhighlight lang="bash">$ echo "123abcABC" | tr "abc" "xyz" </syntaxhighlight>
 
oder
 
oder
: <syntaxhighlight lang="bash">echo "123abcABC" | tr "a-c" "x-z" </syntaxhighlight>  
+
: <syntaxhighlight lang="bash">$ echo "123abcABC" | tr "a-c" "x-z" </syntaxhighlight>  
 
   
 
   
 
: ergibt <code> 123xyzABC </code>  
 
: ergibt <code> 123xyzABC </code>  
 
   
 
   
 
Gross/Klein umwandeln:
 
Gross/Klein umwandeln:
: <syntaxhighlight lang="bash">echo "123abcABC" | tr "a-z" "A-Z" </syntaxhighlight>
+
: <syntaxhighlight lang="bash">$ echo "123abcABC" | tr "a-z" "A-Z" </syntaxhighlight>
 
   
 
   
 
: ergibt <code> 123ABCABC </code>  
 
: ergibt <code> 123ABCABC </code>  
Zeile 25: Zeile 27:
 
   
 
   
 
Mit -c (--complement) Option werden alle Zeichen ausser jenen in SET1 ersetzt:  
 
Mit -c (--complement) Option werden alle Zeichen ausser jenen in SET1 ersetzt:  
: <syntaxhighlight lang="bash">echo "123abcABC" | tr -c "abc" "0" </syntaxhighlight>
+
: <syntaxhighlight lang="bash">$ echo "123abcABC" | tr -c "abc" "0" </syntaxhighlight>
 
   
 
   
 
: ergibt <code> 000abc0000 </code>  
 
: ergibt <code> 000abc0000 </code>  
 
Das überzälige 0 am Schluss ist das unsichtbare <code>\n</code> des <code> echo </code> Kommandos. Es gibt 2 Möglichkeiten das zu  verhindern:  
 
Das überzälige 0 am Schluss ist das unsichtbare <code>\n</code> des <code> echo </code> Kommandos. Es gibt 2 Möglichkeiten das zu  verhindern:  
:<syntaxhighlight lang="bash">echo -n "123abcABC" | tr -c "abc" "0"</syntaxhighlight>
+
:<syntaxhighlight lang="bash">$ echo -n "123abcABC" | tr -c "abc" "0"</syntaxhighlight>
 
:oder
 
:oder
:<syntaxhighlight lang="bash">echo "123abcABC" | tr -c "abc\n" "0"</syntaxhighlight>
+
:<syntaxhighlight lang="bash">$ echo "123abcABC" | tr -c "abc\n" "0"</syntaxhighlight>
 
: ergibt <code> 000abc000 </code>  
 
: ergibt <code> 000abc000 </code>  
 
   
 
   
 
   
 
   
 +
 
==== Zeichen komprimieren -s (--squeeze-repeats) ====
 
==== Zeichen komprimieren -s (--squeeze-repeats) ====
 
<code>-s</code> ersetzt eine Folge von wiederholtem Auftreten eines Zeichens durch ein (anderes) Zeichen.  
 
<code>-s</code> ersetzt eine Folge von wiederholtem Auftreten eines Zeichens durch ein (anderes) Zeichen.  
 
   
 
   
Nur mit SET1:
+
Nur mit SET1 wird das Zeichen in SET1 komprimiert:
: <syntaxhighlight lang="bash">echo "SI    Wiki" | tr -s " " </syntaxhighlight>
+
: <syntaxhighlight lang="bash">$ echo "SI    Wiki" | tr -s " " </syntaxhighlight>
 
   
 
   
 
: ergibt <code>SI Wiki</code>  
 
: ergibt <code>SI Wiki</code>  
 
   
 
   
  
mit SET1 und SET2:
+
mit SET1 und SET2 werden die Zeichen aus SET1 komprimiert und mit SET2 ersetzt:
: <syntaxhighlight lang="bash">echo "SI    Wiki" | tr -s " " ":" </syntaxhighlight>
+
: <syntaxhighlight lang="bash">$ echo "SI    Wiki" | tr -s " " ":" </syntaxhighlight>
 
   
 
   
 
: ergibt <code>SI:Wiki</code>  
 
: ergibt <code>SI:Wiki</code>  
 
   
 
   
 
   
 
   
 +
 
==== Zeichen löschen -d (--delete) ====
 
==== Zeichen löschen -d (--delete) ====
 
Alle Vorkommen der Zeichen aus SET1 werden gelöscht.  
 
Alle Vorkommen der Zeichen aus SET1 werden gelöscht.  
 
   
 
   
: <syntaxhighlight lang="bash">echo "SI    Wiki" | tr -d " i" </syntaxhighlight>
+
: <syntaxhighlight lang="bash">$ echo "SI    Wiki" | tr -d " i" </syntaxhighlight>
 
   
 
   
 
: ergibt <code>SIWk</code>  
 
: ergibt <code>SIWk</code>  
 
   
 
   
 
   
 
   
=== Einige tr Beispiele ===
+
 
 +
=== Einige Beispiele ===
 +
 +
==== Zufallszahl erzeugen ====
 +
: <syntaxhighlight lang="bash">$ tr -cd 0-9 </dev/urandom | head -c 7 </syntaxhighlight>
 +
 
 +
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 ====
 +
: <syntaxhighlight lang="bash">$ echo "Jedes Wort im Satz auf eine neue Zeile" | tr -cs [:alnum:] "\n" </syntaxhighlight>
 +
 +
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 ====
 +
: <syntaxhighlight lang="bash">$ tr -s "\n" < eingabedatei.txt > ausgabedatei.txt </syntaxhighlight>
 +
 +
Liest die eingabedatei.txt (<), wandelt alle mehrfach hintereinander vorkommenden Newlines in ein einzelnes Newline (-s) und schreibt das Ergebnis in die ausgabedatei.txt (>).

Version vom 17. Mai 2021, 17:30 Uhr

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 (>).