很多运维、开发处理文本数据时,第一反应就是用llinux三剑客中的sed、awk。
但实际上,90%的简单文本替换、去空、大小写转换、去特殊字符场景,根本不用上 sed。linux自带的tr命令,轻量、高效、语法极简,管道配合使用效率极高。它是真正的小命令大能量,日常日志清洗、数据格式化、脚本数据处理刚需度拉满。
一、tr的核心功能
tr其实比较简单,tr全称translate(翻译),它的设计哲学是一个字符对应一个字符。总结起来就是:tr=字符替换、删除、压缩、转换工具。
它只处理单个字符级别操作,不支持复杂正则,也正因如此,速度极快、资源占用极低。
核心参数就3个,记完直接通吃所有场景:
tr '原字符' '新字符':字符替换tr -d:删除指定字符tr -s:压缩重复字符(去多余空格、换行神器)
二、tr的常用实战场景
场景1:文本大小写一键互转
日志、配置、变量统一格式化最常用的操作。
#小写转大写echo "linux tr ceshi" | tr 'a-z' 'A-Z'#大写转小写echo "LINUX TR TCESHI" | tr 'A-Z' 'a-z'

常用在脚本变量统一格式化、日志关键字统一匹配。
清洗杂乱日志、剔除多余符号、清理特殊字符必备。
#删除所有数字echo "test123log456" | tr -d '0-9'#删除所有字母(全部大小写字母 )echo "123abc456def" | tr -d 'a-zA-Z'#删除常见特殊符号echo "log@2026#test" | tr -d '@#'

场景3:去除多余空格,统一规整格式
日志经常存在多个空格混用,无法直接精准切割,tr -s可一键压缩。
#多个空格压缩为1个echo "user root id 0" | tr -s ' '

导出的配置文件、日志文件大量空行,影响查看与解析。
#压缩所有连续空行为单行cat ceshi.log | tr -s '\n'

场景5:替换换行符为空格(多行转一行)
遍历结果、日志行数据,需要合并成一行处理时超级好用。
cat ip.txt | tr '\n' ' '
场景6:制表符tab替换为空格
很多配置文件、导出数据tab/空格混用,导致解析异常,一键统一格式。
#Tab 替换为单个空格tr '\t' ' ' < test.conf

场景7:清洗脏日志:一次性剔除乱码、特殊符号
线上日志经常出现不可见字符、乱码、特殊符号,导致脚本解析报错。
#只保留数字、字母、换行,其余全部删除cat app.log | tr -cd '0-9a-zA-Z\n '

其中-c代表取反,意思是:只保留指定字符,其余全部删掉。
场景8:批量替换分隔符
把杂乱分隔符统一成逗号、空格,方便后续导入表格、脚本解析。
#将冒号替换为空格cat /etc/passwd | tr ':' ' '

配合wc统计真实有效日志行,避开大量空行干扰。
cat app.log | tr -s '\n' | wc -l
#也可以使用grep -vc '^$' app.log#-v反选空行,-c计数

场景10:脚本快速脱敏简单数据
临时脱敏手机号、ip片段,简单高效。
echo "192.168.1.1" | tr '.' '-'#将.统一换成-

三、tr 与 sed 核心区别
很多人疑惑:有sed为什么还要用 tr?结合自己的经验给大家讲清楚生产取舍逻辑:
•tr:只做单字符转换、删除、压缩,速度快、语法极简,适合清洗、规整、格式化。
•sed:支持正则、字符串替换、行匹配,适合复杂文本处理,性能比tr重。
#性能测试:1万行文本,删除所有数字time for i in {1..10000}; do echo "test123"; done | tr -d '0-9' > /dev/nulltime for i in {1..10000}; do echo "test123"; done | sed 's/[0-9]//g' > /dev/null

由此科技tr处理速度比sed快很多。最优实践:简单字符处理一律用tr,复杂字符串替换再上sed。
四、注意事项
tr不支持直接处理字符串,只支持单个字符,想替换长内容需用sed;
tr默认只处理标准输入,不直接操作文件,需配合管道/重定向;
tr -s是压缩重复字符,不是删除,仅连续重复字符会合并。
tr看着冷门简单,却是 日志清洗、数据规整、脚本格式化的高频神器。
sed/awk功能很强大,但也比较复杂。如果简单任务用tr做前置数据清洗,可能效率会更高。如果觉的文章对你的运维有帮助,记得点赞加收藏。