使用 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

“截断”是“缩短”的另一个词,对吧?tr根据模式进行翻译,完全忽略该-t选项。如果我自动完成--truncate-set1[以确保我使用正确的选项]会产生相同的输出。

问题: 我在这里做错了什么?

我在基于 Debian 的发行版上使用 BASH 工作。

更新

请注意,这是我在下面发表的评论的副本

我以为的tr -t意思是:将 string1 缩短为 string2 的长度。我看到那个a被翻译成1,那个b将被翻译成2,那个c被翻译成3。这与缩短无关。 “截断”的意思似乎与我想象的不同。 [我不是母语]

答案1

当使用tr -t命令时,string1应该被截断为string2的长度,对吧?

这不是发生了什么事吗?

abcdefghijklmn
123

注意哪些字母被交换,哪些字母没有被交换:

the 3ell1r is the s1fest pl13e

'a' 和 'c',但不包括原始(未截断)集合 1 中的 e、f、i 或 l。

如果没有-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

相关内容