использование команды tr -t

использование команды tr -t

При использовании tr -tкоманды ее string1следует обрезать до длины string2, верно?

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

'truncate' — это другое слово для 'to shorten', верно? trпереводится, согласно шаблону, как полное игнорирование -tопции. Если я автоматически дополню --truncate-set1[to sure that I use the right option], выводится тот же результат.

Вопрос: что я делаю не так?

Я работаю в BASH, на дистрибутиве на базе Debian.

ОБНОВЛЯТЬ

Обратите внимание, что это копия комментария, который я оставил ниже.

Я думал, tr -tчто это означает:укоротить строку1 до длины строки2. Я вижу, что aэто переводится как 1, это bбудет переведено как 2и это cпереводится как 3. Это не имеет ничего общего с сокращением. «Усечение», похоже, означает что-то другое, чем я думал. [Я не носитель языка]

решение1

При использовании команды tr -t строка1 должна быть обрезана до длины строки2, верно?

Разве это не то, что произошло?

abcdefghijklmn
123

Обратите внимание, какие буквы поменяны местами, а какие нет:

the 3ell1r is the s1fest pl13e

«a» и «c», но не e, f, i или l, которые были в исходном (не усеченном) наборе 1.

Без -t, вы получаете:

t33 33331r 3s t33 s133st p3133

Это потому что (из man tr),«SET2 расширен до длины SET1повторив его последний символкак надо." Таким образом, без -tусечения набора 1, то, что у вас есть, то же самое, что и

tr abcdefhijklmn 1233333333333

Давайте рассмотрим другой пример, но используя в качестве входных данных то же самое «подвал — самое безопасное место».

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

-tЭто происходит потому, что второй набор автоматически расширяется, чтобы охватить весь первый набор. делает противоположное этому; он усекает первый набор, а не расширяет второй:

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

Что то же самое, что:

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

Так как 's' было усечено из первого набора. Если бы два набора были одинаковой длины, то использование -tне имело бы никакого значения:

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

Связанный контент