usando el comando tr -t

usando el comando tr -t

Cuando se usa tr -tel comando, string1se debe truncar a la longitud de string2, ¿verdad?

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

'truncar' es otra palabra para 'acortar', ¿verdad? trse traduce, según el patrón, ignorando completamente la -topción. Si autocompletar para --truncate-set1[para asegurarme de usar la opción correcta] produce el mismo resultado.

Pregunta: ¿Qué estoy haciendo mal aquí?

Trabajo en BASH, en una Distro basada en Debian.

ACTUALIZAR

Tenga en cuenta que esta es una copia de un comentario que hice a continuación.

Pensé tr -tsignifica:acortar cadena1 a la longitud de cadena2. Veo que aestá traducido a 1, que bsería traducido a 2y que cestá traducido a 3. Esto no tiene nada que ver con el acortamiento. "Truncar" parece significar algo diferente de lo que pensaba. [No soy un hablante nativo]

Respuesta1

Cuando se usa el comando tr -t, la cadena1 debe truncarse a la longitud de la cadena2, ¿verdad?

¿No es eso lo que pasó?

abcdefghijklmn
123

Observe qué letras se intercambian y qué no:

the 3ell1r is the s1fest pl13e

'a' y 'c', pero no e, f, i o l, que estaban en el conjunto 1 original (no truncado).

Sin el -t, obtienes:

t33 33331r 3s t33 s133st p3133

Esto se debe a que (de man tr),"SET2 se extiende hasta la longitud de SET1repitiendo su último caráctersegún sea necesario." Entonces, sin -ttruncar el conjunto 1, lo que tienes es lo mismo que

tr abcdefhijklmn 1233333333333

Consideremos otro ejemplo, pero usando el mismo "el sótano es el lugar más seguro" como entrada.

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

Esto se debe a que el segundo conjunto se extiende automáticamente para cubrir todo el primer conjunto. -tesencialmentehace lo contrario de eso; trunca el primer conjunto en lugar de extender el segundo:

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

Que es lo mismo que:

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

Ya que la 's' quedó truncada desde el primer set. Si los dos conjuntos tuvieran la misma longitud, entonces usarlos -tno hará ninguna diferencia:

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

información relacionada