Linux命令之tr
发布时间:2025-12-01 00:11       
<span style="color:red;">tr</span> 是 Linux 里非常实用的字符转换工具,专门对“文本流”做替换、删除、压缩等操作,一般配合管道一起用,非常适合做日志清洗、格式转换等场景 ✨。

一、基本用法与语法
tr 的基本语法是:
tr [选项] SET1 [SET2]
解释:
<span style="color:red;">SET1</span>:源字符集,要被处理的字符集合。<span style="color:red;">SET2</span>:目标字符集,用来替换成的字符集合(某些模式下可省略)。[选项]:如-d删除、-s压缩重复、-c取反等,只在部分场景需要。tr不直接处理文件名,而是处理标准输入,所以通常配合echo、cat或重定向使用。
二、字符替换:大小写转换 🔁
echo "hello World" | tr 'a-z' 'A-Z'
解释:
echo "hello World":输出一行字符串hello World。|:管道,把前一个命令的输出作为后一个命令的输入。tr 'a-z' 'A-Z':将所有在<span style="color:red;">a-z</span>范围内的小写字母转换成对应的大写<span style="color:red;">A-Z</span>。- 执行结果:
HELLO WORLD。
这种用法常用来做大小写规范化,方便后续匹配或统计。
三、删除字符:-d 参数 🚮
echo "123-456-789" | tr -d '-'
解释:
echo "123-456-789":输出含有-的数字串。tr -d '-':-d表示删除指定字符集中的所有字符,不做替换。' - '作为字符集,表示删除所有-。
- 执行结果:
123456789。
再看一个删除换行符的例子,把多行拼成一行:
cat test.txt | tr -d '\n'
解释:
cat test.txt:逐行输出test.txt内容。tr -d '\n':删除所有换行符(\n),把多行拼成一个连续的字符串。- 常用于把多行配置、IP 列表等合并成一行,便于做后续处理。
四、压缩重复字符:-s 参数(常用来压缩空格)🧹
echo "a b c" | tr -s ' '
解释:
- 原始字符串中有很多重复空格:
a␣␣␣␣b␣␣␣␣␣c。 -s表示squeeze(压缩),把指定字符集中连续重复出现的字符压缩成一个。' '表示只处理空格字符。- 执行结果:
a b c,多个空格被压缩为单个空格。
这在处理日志、对齐字段时非常实用,可以先压缩空格,再用 cut、awk 做字段提取。
五、取反字符集:-c 搭配删除或替换 🔍
echo "abc123!@#" | tr -cd '0-9'
解释:
-c表示取反,即对“除了 SET1 中的字符以外”的所有字符进行操作。-d表示删除。'0-9'表示数字字符集合。tr -cd '0-9':删除所有“不是数字”的字符,只保留数字。- 执行结果:
123。
这一招非常适合做快速提取数字,比如从混杂的字符串中只保留数字 ID、端口号等。
六、常见组合场景:清理 Windows 换行符、统一格式 🧰
1)去掉 Windows 文件中的 \r(回车符)
tr -d '\r' < winfile.txt > unixfile.txt
解释:
< winfile.txt:把winfile.txt内容重定向为tr的标准输入。