-s
Schalter:Squeeze (wiederholte Zeichen entfernen)
echo i am a good boy | tr -s good bad
Ausgabe:
i am a bd bdy
Es gibt zwei Dinge, die hinter den Kulissen passieren, die dies möglich machen. Erstens, wenn das zweite Argument zu tr
kürzer ist als das erste dann das letzte Zeichen im 2. arg wird wiederholt, um es auf die gleiche Länge wie das erste zu bringen. Der äquivalente Befehl lautet also:
echo i am a good boy | tr -s good badd
Die andere Sache, die passiert, ist, wenn Zeichen im ersten Argument wiederholt werden, überschreiben sie alle vorherigen Vorkommen (ich beziehe mich auf die beiden oo
s in good
). Dadurch entspricht der Befehl jetzt:
echo i am a good boy | tr -s god bdd
(die zweite o
bis d
Ersetzung überschreibt den vorherigen o
bis a
Ersatz, wodurch es überflüssig wird)
Ohne -s
switch wäre die Ausgabe
i am a bddd bdy
Mit dem -s
Schalter tr
"quetscht" alle wiederholten Zeichen, die im letzten aufgelistet sind Argument, das die endgültige Ausgabe verlässt:
i am a bd bdy
-c
Schalter:Komplement
Die -c
switch wird verwendet, um das Komplement des ersten Arguments abzugleichen (d. h. alle Zeichen, die nicht in arg 1 aufgeführt sind). Als Ergebnis enthält arg 1 viele Buchstaben (256-3). Nun passiert mit Arg 2 dasselbe wie im vorherigen Fall:Das letzte Zeichen von Arg 2 wird wiederholt, um der Länge von Arg 1 zu entsprechen. Also die ursprüngliche Anweisung:
echo i am a good boy | tr -c good bad
entspricht:
echo i am a good boy | tr abcefhijklmnp... baddddddddddd...
(beachten Sie den fehlenden g
, o
und d
Beachten Sie im ersten Satz auch, dass d
ersetzt jedes andere Zeichen im zweiten Satz -- einschließlich des Leerzeichens)
Deshalb i am a good boy
wird zu dddddddgoodddodd
Weitere Informationen hier:http://www.linuxjournal.com/article/2563
Ihr Verständnis von -s
falsch ist, ersetzt es wiederholte Vorkommen von Zeichen in Satz 1 in der Eingabe durch ein einzelnes Zeichen. es verändert den Satz nicht, zB.
echo i am a good boy | tr -s god bad
gibt
i am a bad bay
Die -c
Option ersetzt Menge 1 durch ihr Komplement (dh die Menge aller Zeichen, die nicht in Menge 1 enthalten sind). Sie können dies verwenden, um beispielsweise alle außer den angegebenen Zeichen zu entfernen.
echo i am a good boy | tr -cd gobdy
Ausgänge
goodboy