tr命令从标准输入处理字符流,仅支持字符级转换、删除(-d)或压缩(-s),需配合cat或重定向;映射需set1与set2等长,-c取补集,-t截断过长set1。

tr 命令不直接读取文件,而是从标准输入处理字符流,所以转换或删除文件字符时,需配合 cat 或重定向使用。它只做字符级操作——一个换一个、删一个、压一串,不认单词、不碰字符串、也不支持正则。
大小写与符号映射:用两个字符集一一对应
转换必须同时给出 SET1(源)和 SET2(目标),位置严格对齐。比如:
- 小写转大写:
cat file.txt | tr '[:lower:]' '[:upper:]'(推荐用字符类,比a-z更安全) - 把冒号全换成下划线:
cat /etc/passwd | tr ':' '_' - 制表符变空格:
cat data.tsv | tr '\t' ' ' - 注意长度:若
tr 'abc' 'XY',c会按规则被末尾的Y替换,不是报错
精准删除干扰字符:用 -d 选项
只需 SET1,不需 SET2。适合清理标点、数字、控制符等:
- 删掉所有数字:
cat log.txt | tr -d '0-9' - 去掉 Windows 换行符
\r(修复 dos 格式):tr -d '\r' unixfile.txt - 只留字母和换行(其余全删):
tr -d -c '[:alpha:]\n' (<code>-c紧贴-d,表示“删补集”)
压缩冗余空白与重复字符:用 -s 选项
把连续重复出现的字符缩成一个,可指定字符集,也可不指定(作用于全部):
- 多个空格压成一个:
echo "a b c" | tr -s ' ' - 合并连续空行:
tr -s '\n' - 同时压缩空格和制表符:
tr -s ' \t' - 先压再换:如
tr -s 'x' 'y'表示“把连续 x 压成单个 x,再把这个 x 换成 y”
补集与截断:提升操作可控性
-c 单独用易误伤,常配合 -d 或转换;-t 解决字符集长度错配问题:
- 只提取纯数字(含换行):
tr -cd '0-9\n' - 避免 SET1 过长导致末位字符重复映射:
tr -t 'abcdefgh' 'XY'等价于tr 'ab' 'XY',自动截断 SET1 - 把非字母数字全换成换行(每行一个单词):
tr -c '[:alnum:]' '\n'











