Cuando se usa tr -t
el comando, string1
se 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? tr
se traduce, según el patrón, ignorando completamente la -t
opció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 -t
significa:acortar cadena1 a la longitud de cadena2. Veo que a
está traducido a 1
, que b
sería traducido a 2
y que c
está 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 -t
truncar 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. -t
esencialmentehace 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 -t
no 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