Tr Kommando: Unterschied zwischen den Versionen
Sigi (Diskussion | Beiträge) (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…») |
Sigi (Diskussion | Beiträge) |
||
| (6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 8: | Zeile 8: | ||
: <code> tr </code> 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. | : <code> tr </code> 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. | ||
: SET2 wird an die Länge von SET1 angepasst entweder durch Kürzung, oder durch Erweiterung indem das letzte Zeichen aus SET2 bis zur Länge von SET1 wiederholt wird. Die -t Option invertiert dieses Verhalten. | |||
: 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 28: | ||
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 | |||
=== Einige Beispiele === | |||
==== Zufallszahl erzeugen ==== | |||
: <syntaxhighlight lang="bash">$ tr -cd 0-9 </dev/urandom | head -c 7 </syntaxhighlight> | |||
Liest aus /dev/urandom, bildet durch Komplement alle Nicht-Zahlen (-c 0-9), 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 (>). | |||
==== Caesar-Verschlüsselung / monoalphabetische Substitution ==== | |||
Caeser Verschlüsselung mit Schlüssel "d", also einer Verschiebung um 4 Buchstaben unter Beibehalt von Gross- Kleinsbuchstaben. | |||
Jedes Zeichen in a-z resp. A-Z wird um 4 Stellen verschoben zu e-zabcd resp. E-ZABCD. | |||
: <syntaxhighlight lang="bash">$ echo "Das ist eine geheime Nachricht" | tr 'a-zA-Z' 'e-zabcdE-ZABCD'</syntaxhighlight> | |||
: ergibt Geheimtext "<code>Hew mwx imri kilimqi Reglvmglx</code>" | |||
zum Entschlüsseln des Geheimtextes wird einfach SET1 und SET2 vertauscht: | |||
: <syntaxhighlight lang="bash">$ echo "Hew mwx imri kilimqi Reglvmglx" | tr 'e-zabcdE-ZABCD' 'a-zA-Z'</syntaxhighlight> | |||
: ergibt Klartext "<code>Das ist eine geheime Nachricht</code>" | |||
Aktuelle Version vom 17. Mai 2021, 16:36 Uhr
- Mit
trkönnen Zeichen ersetzt, komprimiert oder gelöscht werden.
Synopsis:
tr [option]... SET1 [SET2]
trakzeptiert 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.- SET2 wird an die Länge von SET1 angepasst entweder durch Kürzung, oder durch Erweiterung indem das letzte Zeichen aus SET2 bis zur Länge von SET1 wiederholt wird. Die -t Option invertiert dieses Verhalten.
- 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 alle Nicht-Zahlen (-c 0-9), 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 (>).
Caesar-Verschlüsselung / monoalphabetische Substitution
Caeser Verschlüsselung mit Schlüssel "d", also einer Verschiebung um 4 Buchstaben unter Beibehalt von Gross- Kleinsbuchstaben.
Jedes Zeichen in a-z resp. A-Z wird um 4 Stellen verschoben zu e-zabcd resp. E-ZABCD.
$ echo "Das ist eine geheime Nachricht" | tr 'a-zA-Z' 'e-zabcdE-ZABCD'
- ergibt Geheimtext "
Hew mwx imri kilimqi Reglvmglx"
zum Entschlüsseln des Geheimtextes wird einfach SET1 und SET2 vertauscht:
$ echo "Hew mwx imri kilimqi Reglvmglx" | tr 'e-zabcdE-ZABCD' 'a-zA-Z'
- ergibt Klartext "
Das ist eine geheime Nachricht"