Linux 命令:tr

📅 发布时间:2026/7/10 23:54:41 👁️ 浏览次数:
Linux 命令:tr
概述tr命令这个命令是字符转换/替换/删除工具核心作用是对文本中的单个字符进行批量处理——包括字符替换、大小写转换、删除指定字符、压缩重复字符等特点是轻量、高效、仅处理单个字符是文本字符级处理的基础工具。资料合集https://pan.quark.cn/s/6fe3007c3e95、https://pan.quark.cn/s/561de99256a5、https://pan.quark.cn/s/985f55b13d94、https://pan.quark.cn/s/d0fb20abd19a一、核心特点仅处理单个字符无法处理多字符字符串如把abc替换成123需逐个字符对应按字符集映射替换时按「源字符集」和「目标字符集」的位置一一对应支持标准输入无文件参数时读取管道/标准输入是管道组合的高频工具无修改原文件仅输出处理结果需通过重定向写入文件才会修改内容。二、基本语法tr[选项]源字符集 目标字符集# 替换/转换核心tr[选项]字符集# 删除/压缩仅一个字符集字符集写法支持直接写字符如abc、范围如a-z、特殊转义符如\t制表符、\n换行符常用特殊字符集简写GNU tr支持[:upper:]所有大写字母A-Z[:lower:]所有小写字母a-z[:digit:]所有数字0-9[:space:]所有空白字符空格、制表符、换行符等[:punct:]所有标点符号三、核心选项tr的选项围绕「替换、删除、压缩」设计无冗余选项核心功能一键实现选项作用实用场景-d删除源字符集中的所有字符过滤文本中的指定字符如数字、标点、空格-s压缩源字符集中的连续重复字符为单个压缩连续空格/换行符、去重连续重复字符-c取反匹配「非源字符集」的所有字符保留指定字符删除其他所有字符反向过滤-t截断目标字符集仅替换到源字符集长度默认目标超长时重复最后一个字符精准字符映射避免默认的重复填充-s 字符集仅压缩指定字符的连续重复单独使用压缩连续空行、连续空格为单个四、经典实操示例准备测试文本# 生成测试文本含大小写、数字、空格、标点echoHello World! 123 456\nLinux 命令 Tr, 测试 文本tr_test.txt五、核心功能1字符替换/转换场景1大小写转换# 1. 小写转大写两种写法推荐简写更易读cattr_test.txt|tra-z A-Zcattr_test.txt|tr[:lower:][:upper:]# 输出HELLO WORLD! 123 456\nLINUX 命令 TR, 测试 文本# 2. 大写转小写cattr_test.txt|trA-Z a-zcattr_test.txt|tr[:upper:][:lower:]# 输出hello world! 123 456\nlinux 命令 tr, 测试 文本场景2字符一一映射替换# 把数字0-9替换为a-j按位置一一对应echo12345|tr0123456789 abcdefghij# 输出bcdef# 把空格替换为制表符cattr_test.txt|tr \t# 输出Hello\tWorld!\t123\t\t456\nLinux\t命令\tTr,\t测试\t\t文本场景3精准替换# 无-t目标超长时源字符集最后一个字符映射到目标剩余所有字符echoabc|trabc12345# a→1, b→2, c→3目标45无对应但不影响# 输出123# 加-t仅替换到源字符集长度截断目标字符集精准映射echoabc|tr-t abc12345# 效果同上更规范六、核心功能2删除指定字符场景1删除数字/标点/空格# 1. 删除所有数字cattr_test.txt|tr-d0-9cattr_test.txt|tr-d[:digit:]# 输出Hello World! \nLinux 命令 Tr, 测试 文本# 2. 删除所有标点符号cattr_test.txt|tr-d[:punct:]# 输出Hello World 123 456\nLinux 命令 Tr 测试 文本# 3. 删除所有空格含制表符用[:space:]仅删空白保留换行cattr_test.txt|tr-d # 输出HelloWorld!123456\nLinux命令Tr,测试文本场景2保留指定字符删除其他所有# 仅保留字母和换行符删除其他所有字符数字、空格、标点、中文cattr_test.txt|tr-cd a-zA-Z\n# 输出HelloWorld\nLinuxTr七、核心功能3压缩连续重复字符场景1压缩连续空格/换行符# 1. 压缩连续空格为单个解决文本中多余空格问题cattr_test.txt|tr-s # 输出Hello World! 123 456\nLinux 命令 Tr, 测试 文本# 2. 压缩连续空行为单个日志去重空行echo-eline1\n\n\nline2\n\nline3|tr-s\n# 输出# line1# line2# line3# 3. 压缩指定重复字符如连续的数字8echo888999777|tr-s89# 输出8999777仅8被压缩为单个9仍保留连续场景2替换压缩组合# 把所有换行符替换为空格再压缩连续空格为单个日志行合并cattr_test.txt|tr\n |tr-s # 输出Hello World! 123 456 Linux 命令 Tr, 测试 文本八、高频组合用法1. 日志处理合并多行日志为单行删除多余空格catapp.log|tr\n |tr-s app_single.log2. 文本清洗仅保留字母、数字和中文删除其他字符# 中文需用范围不同编码可能不同UTF-8下[\4e00-\9fa5]为中文cattext.txt|tr-cd a-zA-Z0-9\4e00-\9fa5\n3. 生成随机密码取/dev/urandom的字符过滤后取10位cat/dev/urandom|tr-cd a-zA-Z0-9|head-c10# 输出8k9s7B2x5G随机10位字母数字密码4. 转换Windows换行符\r\n为Linux换行符\n# 删除\r回车符仅保留\n解决Windows文件在Linux的换行问题dos2unix 等价于tr -d\rwindows.txtlinux.txt5. 统计文本中数字出现的总次数cattr_test.txt|tr-cd[:digit:]|wc-c# 输出6tr_test.txt中有123456共6个数字九、与sed的核心区别tr和sed均为文本处理工具但处理粒度和场景完全不同避免用错工具命令处理粒度核心能力适用场景tr单个字符字符替换、删除、压缩仅单字符大小写转换、字符过滤、重复字符压缩、简单字符映射sed行/字符串字符串替换、行增删、正则匹配多字符替换如abc→123、行级过滤、正则替换经典对比示例# 需求1把所有a替换为1b替换为2单字符tr更简单echoabcab|trab12# 输出12c12# 需求2把字符串abc替换为123多字符tr无法实现用sedechoabcab|seds/abc/123/g# 输出123abtr做不到# 需求3删除所有空格tr更高效echoa b c|tr-d # 输出abc# 需求4删除包含test的行行级处理用sedecho-etest1\ntest2\nline3|sed/test/d# 输出line3结论单字符处理用tr高效简洁多字符/行级/正则处理用sed灵活强大。十、关键注意事项仅单字符处理tr无法处理多字符替换如tr abc 123是a→1、b→2、c→3而非abc整体替换为123字符集长度替换时若源字符集长度 目标字符集目标最后一个字符会重复映射如tr abc 12→ a→1、b→2、c→2原文件不修改tr仅输出处理结果需用重定向写入文件才会保存修改转义符使用特殊字符如\t、\n需用双引号/单引号包裹避免终端解析错误中文处理tr按字节处理UTF-8中文占3字节直接替换/删除中文可能乱码需确保字符集匹配推荐用sed处理中文。十一、总结tr是Linux字符级处理的轻量神器核心价值是用极简语法实现单个字符的批量替换、删除、压缩无需复杂脚本是管道组合的高频工具其核心要点可总结为核心功能替换一一映射、删除-d、压缩-s、取反-c高频场景大小写转换、空格/换行压缩、字符过滤、换行符转换工具边界单字符处理用tr多字符/行级处理用sed组合用法与grep、cut、wc等搭配实现文本清洗、日志处理、数据提取。