Utilities
使用 tr -t 命令comprehensionquestionC這米pr和H和ns一世這nq你和s噸一世這ncomprehension question
使用
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