news 2026/4/17 20:26:59

Linux 命令:tr

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux 命令:tr

概述

tr命令,这个命令是字符转换/替换/删除工具,核心作用是对文本中的单个字符进行批量处理——包括字符替换、大小写转换、删除指定字符、压缩重复字符等,特点是轻量、高效、仅处理单个字符,是文本字符级处理的基础工具。

资料合集:https://pan.quark.cn/s/6fe3007c3e95https://pan.quark.cn/s/561de99256a5https://pan.quark.cn/s/985f55b13d94https://pan.quark.cn/s/d0fb20abd19a

一、核心特点

  1. 仅处理单个字符:无法处理多字符字符串(如把abc替换成123需逐个字符对应);
  2. 按字符集映射:替换时按「源字符集」和「目标字符集」的位置一一对应;
  3. 支持标准输入:无文件参数时读取管道/标准输入,是管道组合的高频工具;
  4. 无修改原文件:仅输出处理结果,需通过重定向>写入文件才会修改内容。

二、基本语法

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+ 字符集仅压缩指定字符的连续重复(单独使用)压缩连续空行、连续空格为单个

四、经典实操示例

准备测试文本
# 生成测试文本(含大小写、数字、空格、标点)echo"Hello 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(按位置一一对应)echo"12345"|tr0123456789 abcdefghij# 输出:bcdef# 把空格替换为制表符cattr_test.txt|tr" ""\t"# 输出:Hello\tWorld!\t123\t\t456\nLinux\t命令\tTr,\t测试\t\t文本
场景3:精准替换
# 无-t:目标超长时,源字符集最后一个字符映射到目标剩余所有字符echo"abc"|trabc12345# a→1, b→2, c→3,目标45无对应但不影响# 输出:123# 加-t:仅替换到源字符集长度,截断目标字符集(精准映射)echo"abc"|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-e"line1\n\n\nline2\n\nline3"|tr-s"\n"# 输出:# line1# line2# line3# 3. 压缩指定重复字符(如连续的数字8)echo"888999777"|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.log
2. 文本清洗:仅保留字母、数字和中文,删除其他字符
# 中文需用范围(不同编码可能不同,UTF-8下[\4e00-\9fa5]为中文)cattext.txt|tr-cd a-zA-Z0-9"\4e00-\9fa5"\n
3. 生成随机密码:取/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"\r"<windows.txt>linux.txt
5. 统计文本中数字出现的总次数
cattr_test.txt|tr-cd[:digit:]|wc-c# 输出:6(tr_test.txt中有123456共6个数字)

九、与sed的核心区别

trsed均为文本处理工具,但处理粒度和场景完全不同,避免用错工具:

命令处理粒度核心能力适用场景
tr单个字符字符替换、删除、压缩(仅单字符)大小写转换、字符过滤、重复字符压缩、简单字符映射
sed行/字符串字符串替换、行增删、正则匹配多字符替换(如abc→123)、行级过滤、正则替换
经典对比示例
# 需求1:把所有a替换为1,b替换为2(单字符,tr更简单)echo"abcab"|trab12# 输出:12c12# 需求2:把字符串abc替换为123(多字符,tr无法实现,用sed)echo"abcab"|sed's/abc/123/g'# 输出:123ab(tr做不到)# 需求3:删除所有空格(tr更高效)echo"a b c"|tr-d" "# 输出:abc# 需求4:删除包含"test"的行(行级处理,用sed)echo-e"test1\ntest2\nline3"|sed'/test/d'# 输出:line3

结论单字符处理用tr(高效简洁);多字符/行级/正则处理用sed(灵活强大)。

十、关键注意事项

  1. 仅单字符处理:tr无法处理多字符替换(如tr "abc" "123"是a→1、b→2、c→3,而非abc整体替换为123);
  2. 字符集长度:替换时若源字符集长度 > 目标字符集,目标最后一个字符会重复映射(如tr abc 12→ a→1、b→2、c→2);
  3. 原文件不修改:tr仅输出处理结果,需用>重定向写入文件才会保存修改;
  4. 转义符使用:特殊字符(如\t\n)需用双引号/单引号包裹,避免终端解析错误;
  5. 中文处理:tr按字节处理UTF-8中文(占3字节),直接替换/删除中文可能乱码,需确保字符集匹配(推荐用sed处理中文)。

十一、总结

trLinux字符级处理的轻量神器,核心价值是用极简语法实现单个字符的批量替换、删除、压缩,无需复杂脚本,是管道组合的高频工具,其核心要点可总结为:

  1. 核心功能:替换(一一映射)、删除(-d)、压缩(-s)、取反(-c);
  2. 高频场景:大小写转换、空格/换行压缩、字符过滤、换行符转换;
  3. 工具边界:单字符处理用tr,多字符/行级处理用sed;
  4. 组合用法:与grep、cut、wc等搭配,实现文本清洗、日志处理、数据提取。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 2:53:45

通过postman工具测试一个https post请求

Qwen3-Max 使用 Postman 测试一个 HTTPS POST 请求非常简单,以下是详细步骤: ✅ 前提条件 已安装 Postman 你有目标接口的 URL(例如:https://api.example.com/v1/login) 你知道请求需要的数据格式(如 JSON、表单等)和所需字段 📌 步骤详解 1. 打开 Postman 启动 Po…

作者头像 李华
网站建设 2026/4/17 3:40:36

【网络安全】从入门到顶尖 网络安全行业发展路径指南

文章目录 网络安全行业发展路径与成就达成指南一、行业趋势与核心方向二、发展路径规划 1. 小白入门阶段&#xff08;0-2年&#xff09;2. 进阶高手阶段&#xff08;3-5年&#xff09;3. 成就突破阶段&#xff08;5-10年&#xff09; 三、批判性建议与风险警示四、终极目标达成…

作者头像 李华
网站建设 2026/4/16 19:06:04

微信小程序和HTML5有什么区别,如何互相内嵌使用?

目录 一、微信小程序介绍二、什么是内嵌H5页面三、小程序内嵌H5页面的如何交互四、微信小程序的应用场景 一、微信小程序介绍 微信小程序是一种基于微信平台的轻量级应用&#xff0c;它无需下载安装&#xff0c;用户只需通过微信扫一扫或搜索即可快速打开使用。与传统的APP相比…

作者头像 李华
网站建设 2026/4/12 16:43:22

计算机毕设java迎新网管理系统 基于Java的高校新生报到信息化管理系统设计与实现 Java技术驱动的高校迎新管理平台开发与应用

计算机毕设java迎新网管理系统y1s2o9&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。 随着高校招生规模的不断扩大&#xff0c;新生报到管理成为高校开学季的重要工作之一。传统…

作者头像 李华
网站建设 2026/4/16 12:49:02

【小程序毕设源码分享】基于springboot+小程序的景区的智慧导游小程序的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华