Shell
如何使用 tr REPEAT 修飾符將字元替換為重複字元?
我正在使用該
tr
命令將換行符替換為另一個命令輸出中的製表符,並且我希望有多個製表符以更好地將輸出與列格式對齊。我看到
tr
有一個[CHAR*REPEAT]
選項,其中REPEAT
可能是十進製或八進制值,但我無法讓它工作,例如以下簡單的行:echo "1234" | tr ['2'] ['x'*3]
給出:
1x34
雖然我期待:
1xxx34
使用的正確語法是什麼?
恐怕您誤解了“重複”選項的含義。
tr
,正如您正確推斷的那樣,用於翻譯字元集。你用選項呼叫它tr *set1* *set2*
這個想法是兩個集合都可以包含多個字元,即你可以說
tr 'abc' 'def'
它將
a
用 a替換 everyd
,b
用 an替換 everye
,用c
an替換 everyf
。現在,有時您想用相同的“輸出”字元替換多個“輸入”字元,例如tr 'abcdefghij' 'xxxxxxxxyz'
這將替換
a
為h
withx
、i
withy
和j
withz
。“repeat” 函式是為了讓編寫變得不那麼麻煩,這樣你就可以改寫tr 'abcdefghij' '[x*8]yz'
作為速記。不幸的是,這意味著它不是為您打算做的事情而設計的。
相反,你可以試試
sed
$ echo "1234" | sed 's/2/xxx/g' 1xxx34
這將替換 (
s
) 的所有出現(尾隨g
)2
withxxx
。由於sed
比這更強大(查看標記為sed的問題以了解可能的情況),無論如何查看一下可能是個好主意。