tr — 轉換或刪除字元

轉換、壓縮或刪除輸入串流中的指定字元。

語法

tr [選項] 字元集1 [字元集2]

常用選項

選項 說明 範例
-d, --delete 刪除字元集1中的所有字元 tr -d '\n'
-s, --squeeze-reps 將連續重複的字元壓縮為一個 tr -s ' '
-c, --complement 取字元集1的補集(操作不在集合中的所有字元) tr -cd '[:print:]'

使用範例

範例 1:大寫轉小寫

使用字元類別 [:upper:] 和 [:lower:] 進行大小寫轉換。

$ echo "Hello World" | tr "[:upper:]" "[:lower:]"
hello world
範例 2:小寫轉大寫

同樣的方式轉成大寫。

$ echo "hello world" | tr "[:lower:]" "[:upper:]"
HELLO WORLD
範例 3:刪除指定字元

刪除字串中所有的數字。

$ echo "abc123def456" | tr -d "0-9"
abcdef
範例 4:刪除換行符

將多行輸出合併為一行(刪除換行符)。

$ printf 'a\nb\nc' | tr -d '\n'
abc
範例 5:將空白壓縮為單一空格

使用 -s 將多個連續空格壓縮為一個。

$ echo "hello    world   !" | tr -s " "
hello world !
範例 6:刪除非可見字元

只保留可見的字元(刪除控制字元),清理特殊格式的文字。

$ cat binary-mixed.txt | tr -cd '[:print:]\n'
(只保留可列印字元的輸出)

常見錯誤與排錯

tr: cannot find character in set
原因
tr 不接受正規表示式,只接受字元集(字面字元或 [:類別:])。
解法
改用字元範圍(a-z)或字元類別([:alpha:])表示法,或改用 sed 處理。

延伸閱讀