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 處理。