Utilities

使用 tr -t 命令comprehensionquestionC這米pr和H和ns一世這nq你和s噸一世這ncomprehension question

  • April 27, 2013

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

$$ to assure that I use the correct option $$產生相同的輸出。 問題:我在這裡做錯了什麼?

我在 BASH 工作,在一個基於 Debian 的發行版上。

更新

請注意,這是我在下面發表的評論的副本

我認為的tr -t意思是:將 string1 縮短為 string2 的長度。我看到那a被翻譯成1,那b將被翻譯成2,那c被翻譯成3。這與縮短無關。“截斷”似乎意味著與我想像的不同。

$$ I’m no native speaker $$

使用 tr -t 命令時,string1 應該被截斷為 string2 的長度,對吧?

不就是這麼回事嗎?

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

引用自:https://unix.stackexchange.com/questions/73792