tr(translate)是 sed 的極簡變體:專注單字符替換、刪除、去重,語法極簡,無需正則表達式,腳本中極易嵌入。
tr [OPTION]... SET1 [SET2]
SET1、SET2:字符集合,支持範圍(a-z)、字符類([:digit:])、轉義序列(\n、\t、\0)。SET2 時配合 -d 刪除,-s 壓縮。| 選項 | 功能 | 示例 |
|---|---|---|
| (無) | 字符映射替換(SET1→SET2) | tr a-z A-Z 小寫轉大寫 |
| -d | 刪除 SET1 中字符 | tr -d '\r' 刪除回車 |
| -s | 壓縮連續重複字符為單個 | tr -s ' ' 多空格合一 |
| -c / -C | 取補集(非 SET1 字符) | tr -cd '[:print:]' 只保留可打印字符 |
| 來源格式 | 行尾符 | 轉換命令 |
|---|---|---|
| Mac (Classic) | \r (CR) | tr '\r' '\n' < macfile > unixfile |
| Unix/Linux | \n (LF) | tr '\n' '\r' < unixfile > macfile |
| DOS/Windows | \r\n (CRLF) | tr -d '\r' < dosfile > unixfile |
反向 Unix→DOS 需 awk:awk '{print $0"\r"}' < unixfile > dosfile(tr 不支持一字符換兩字符)。
tr -d '\t' < filetr -s ' ' < filetr -d '\n' < file(慎用,會丟失結構)在 vi 中全文處理::%!tr -d '\t'。
echo "secret" | tr 'a-zA-Z' 'n-za-mN-ZA-M'
# frperg
[:alnum:]、[:alpha:]、[:digit:]、[:space:]、[:punct:]、[:print:]、[:cntrl:]、[:xdigit:]、[:lower:]、[:upper:]。\123、\x1B 表示不可打印字符。tr -cd '[:print:]\n' < binary_file > clean_text 提取可打印文本。tr(更快、語法更簡潔)。sed。awk。