Shell

如何使用 tr REPEAT 修飾符將字元替換為重複字元?

  • July 30, 2021

我正在使用該tr命令將換行符替換為另一個命令輸出中的製表符,並且我希望有多個製表符以更好地將輸出與列格式對齊。

我看到tr有一個[CHAR*REPEAT]選項,其中REPEAT可能是十進製或八進制值,但我無法讓它工作,例如以下簡單的行:

echo "1234" | tr ['2'] ['x'*3]

給出:

1x34

雖然我期待:

1xxx34

使用的正確語法是什麼?

恐怕您誤解了“重複”選項的含義。

tr,正如您正確推斷的那樣,用於翻譯字元集。你用選項呼叫它

tr *set1*  *set2*

這個想法是兩個集合都可以包含多個字元,即你可以說

tr 'abc' 'def'

它將a用 a替換 every db用 an替換 every e,用can替換 every f。現在,有時您想用相同的“輸出”字元替換多個“輸入”字元,例如

tr 'abcdefghij' 'xxxxxxxxyz'

這將替換ahwith xiwithyjwith z。“repeat” 函式是為了讓編寫變得不那麼麻煩,這樣你就可以改寫

tr 'abcdefghij' '[x*8]yz'

作為速記。不幸的是,這意味著它不是為您打算做的事情而設計的。

相反,你可以試試sed

$ echo "1234" | sed 's/2/xxx/g'
1xxx34

這將替換 ( s) 的所有出現(尾隨g2with xxx。由於sed比這更強大(查看標記為sed的問題以了解可能的情況),無論如何查看一下可能是個好主意。

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