Verwenden des Befehls tr -t

Verwenden des Befehls tr -t

Bei Verwendung tr -tdes Befehls string1sollte auf die Länge von gekürzt werden string2, richtig?

tr -t abcdefghijklmn 123          # abc... = string1, 123 = string2
the cellar is the safest place    # actual input
the 3ell1r is the s1fest pl13e    # actual output

„abschneiden“ ist ein anderes Wort für „verkürzen“, oder? trbedeutet laut Muster, die -tOption vollständig zu ignorieren. Wenn ich die automatische Vervollständigung auf --truncate-set1[um sicherzustellen, dass ich die richtige Option verwende] ausführe, wird dieselbe Ausgabe erzeugt.

Frage: was mache ich hier falsch?

Ich arbeite in BASH, einer Debian-basierten Distribution.

AKTUALISIEREN

Bitte beachten Sie, dass dies eine Kopie eines Kommentars ist, den ich unten abgegeben habe

Ich dachte tr -t, es bedeutet:Kürzen Sie string1 auf die Länge von string2. Ich sehe, dass das amit übersetzt wird 1, das bwürde mit übersetzt werden 2und das cwird mit übersetzt 3. Das hat nichts mit Kürzen zu tun. „Abkürzen“ scheint etwas anderes zu bedeuten, als ich dachte. [Ich bin kein Muttersprachler]

Antwort1

Bei Verwendung des Befehls tr -t sollte Zeichenfolge1 auf die Länge von Zeichenfolge2 gekürzt werden, richtig?

Ist das nicht passiert?

abcdefghijklmn
123

Beachten Sie, welche Buchstaben vertauscht sind und welche nicht:

the 3ell1r is the s1fest pl13e

„a“ und „c“, aber nicht e, f, i oder l, die im ursprünglichen (nicht gekürzten) Satz 1 enthalten waren.

Ohne -terhalten Sie:

t33 33331r 3s t33 s133st p3133

Dies liegt daran, dass (von man tr),„SET2 wird auf die Länge von SET1 verlängertdurch Wiederholung des letzten Zeichenswie nötig." Ohne das -tKürzen von Satz 1 haben Sie also das Gleiche wie

tr abcdefhijklmn 1233333333333

Betrachten wir ein weiteres Beispiel, verwenden aber als Eingabe denselben Wert wie zuvor: „Der Keller ist der sicherste Ort“.

> input="the cellar is the safest place"
> echo $input | tr is X
the cellar XX the XafeXt place

-tDies liegt daran , dass der 2. Satz automatisch erweitert wird, um den gesamten ersten Satz abzudecken. tut das Gegenteil davon; es kürzt den ersten Satz, anstatt den zweiten zu erweitern:

> echo $input | tr -t is X
the cellar Xs the safest place

Was dasselbe ist wie:

> echo $input | tr i X
the cellar Xs the safest place

Da das „s“ aus dem ersten Satz abgeschnitten wurde. Wenn die beiden Sätze gleich lang wären, würde die Verwendung -tkeinen Unterschied machen:

> echo $input | tr is XY
the cellar XY the YafeYt place
> echo $input | tr -t is XY
the cellar XY the YafeYt place

verwandte Informationen