tr 是 linux 中专用于字符级替换、删除和压缩的轻量文本处理命令,支持大小写转换、控制符处理、补集操作及字符集截断等高频运维场景。

tr 命令在 Linux 运维中是轻量但高频的文本处理工具,专用于字符级操作——不碰字符串、不认正则,只对单个字符做替换、删减或压缩。它不读文件(除非配合 cat),默认从标准输入流读,输出到标准输出,天然适合管道协作。
字符转换:大小写、符号映射、ASCII 控制符处理
转换需同时指定两个字符集(SET1 和 SET2),位置严格一一对应。长度不等时,tr 默认用 SET2 末尾字符填充多余位置(如 tr 'abc' 'XY' 中,c 会被 Y 替换)。
- 大小写互转推荐用字符类,更安全可移植:tr '[:lower:]' '[:upper:]' 或 tr '[:upper:]' '[:lower:]'
- 把制表符换成空格:tr '\t' ' '
- 删除 Windows 换行符 ^M(即 \r):tr -d '\r'(常用于修复 dos 格式日志)
- 将非字母数字字符统一换为换行符,实现“每行一个单词”:tr -c '[:alnum:]' '\n'
字符删除:精准剥离干扰内容
使用 -d 选项,只给 SET1,不需 SET2。适合清理标点、数字、控制符或特定分隔符。
- 删掉所有数字:tr -d '0-9'
- 删掉冒号(如处理 /etc/passwd 输出):cat /etc/passwd | tr -d ':'
- 只保留数字和换行(其余全删):tr -d -c '0-9\n'(注意 -c 要紧贴 -d)
字符压缩:合并冗余空白与重复符号
-s 选项将连续重复出现的字符序列压缩为单个。可指定目标字符集,也可不指定(此时作用于所有字符)。
- 把多个空格压成一个:tr -s ' '
- 把连续换行压成一行空行:tr -s '\n'
- 同时压缩空格和制表符:tr -s ' \t'
- 先压缩再转换:如 tr -s 'x' 'y' 表示“把连续 x 压成一个 x,再把这个 x 换成 y”
进阶技巧:补集与截断配合提升可控性
单独用 -c 容易误伤,常与 -d 或转换联用;-t 则解决字符集长度错配问题,避免意外覆盖。
- 删掉除字母外的所有字符(含空格、换行):tr -cd '[:alpha:]\n'
- 确保 SET1 不超 SET2 长度(防末位字符重复映射):tr -t 'abcdefgh' 'XY' 等价于 tr 'ab' 'XY'
- 把所有非数字字符替换成星号(*):tr -c '0-9' '*'











