tr 命令

本文深入解析了Linux下tr命令的三种主要用法:字符映射实现大小写转换,字符压缩用于去除多余空格并进行格式调整,以及字符删除功能。通过具体示例展示了如何利用tr命令进行文本处理,是学习Linux文本操作技巧的实用指南。

1. tr 映射(tr  "[a-z]" [A-Z])

  

echo abc|tr "[a-z]" "[A-Z]"
#一对一映射大小写转换
#输出
ABC

2. tr 压缩(tr -s)

cat words.txt |tr -s ' ' 

2.1 tr 压缩替换

echo abc   def |tr -s ' ' '\n'
#将多个空格压缩成1个空格,完事后,将空格替换为换行符
#输出结果为
abc
def

3. tr 删除(tr -d)

<think>我们正在讨论如何使用`tr`命令。根据引用,`tr`命令用于转换、压缩或删除字符。它从标准输入读取数据,处理后将结果输出到标准输出。 主要用途: 1. 字符转换(如将小写转为大写) 2. 删除字符 3. 压缩重复字符 基本语法: tr [选项] SET1 [SET2] 注意:`tr`命令不接受文件名作为参数,所以必须通过管道或输入重定向来提供输入。 根据引用[1]和引用[2]: - 转换:`tr 'set1' 'set2'`,将输入中属于set1的字符替换为set2中对应位置的字符。 - 删除:`tr -d 'set1'`,删除输入中属于set1的字符。 - 压缩:`tr -s 'set1'`,将输入中重复的set1中的字符压缩为一个。 另外,引用[3]和引用[4]提供了具体的转换例子。 下面我们详细说明: 1. 转换字符: 例如,将小写字母转换为大写字母: echo "hello world" | tr 'a-z' 'A-Z' 输出:HELLO WORLD 另一个例子(引用[3]): echo '12345' | tr '0-9' '9876543210' 输出:87654 (因为1被9替换,2被8替换,以此类推) 引用[4]的例子是一个ROT13密码(字母按字母表旋转13位): echo "uv,guvf vf uhvtr" | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' 'NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm' 输出:hi, this is hidden 2. 删除字符: 例如,删除数字: echo "hello123" | tr -d '0-9' 输出:hello 3. 压缩字符: 例如,将多个连续空格压缩为一个空格: echo "hello world" | tr -s ' ' 输出:hello world 另外,还可以同时使用多个操作,比如先转换再压缩,但是注意一次只能做一个操作(转换、删除、压缩中的一种)。不过可以通过管道组合多个tr命令。 选项: -c 或 --complement:取字符集的补集(即匹配不在set1中的字符) -d 或 --delete:删除字符 -s 或 --squeeze-repeats:压缩重复字符 -t 或 --truncate-set1:将set1的长度截断为set2的长度(在转换时使用) 注意: - 字符集可以使用范围表示,如a-z, A-Z, 0-9等。 - 也可以使用预定义字符类,如:[:alnum:](字母和数字)、[:alpha:](字母)、[:digit:](数字)等,但需要放在'[::]'中,例如:tr '[:lower:]' '[:upper:]' 举例: 删除所有非数字字符: echo "phone: 123-456" | tr -cd '[:digit:]' 输出:123456 (因为-c取补集,即非数字字符,然后-d删除) 重要:由于tr处理的是单个字符,所以它不能用于多字符替换(如将"hello"替换为"world"),这种情况应该使用sed。 现在,我们结合用户之前的问题(拆分字符串)来展示tr的另一种用法:将逗号替换为空格,从而便于shell进行单词分割(但注意空格处理问题,如果有空格字段则不合适)。 例如,拆分逗号分隔的字符串(但前提是字段内没有空格): str="apple,banana,orange" arr=($(echo $str | tr ',' ' ')) for fruit in "${arr[@]}"; do echo $fruit done 输出: apple banana orange 但是,如果字段内包含空格,这种方法就会出错。因此,在复杂情况下建议使用之前提到的IFS方法。 总结tr命令的使用方法: 1. 转换:tr 'set1' 'set2' 2. 删除:tr -d 'set1' 3. 压缩:tr -s 'set1' 并且,tr命令通常与管道一起使用。 下面我们生成相关问题。</think>### Shell 中 `tr` 命令的使用方法详解 `tr`(translate/transform)是 Linux Shell 中强大的字符处理工具,主要用于字符转换、删除和压缩操作。它从标准输入读取数据,处理后输出到标准输出,常与管道符 `|` 结合使用。 --- #### 一、核心功能与应用 1. **字符转换**(基本用法) 将输入字符集中的字符映射到目标字符集: ```bash echo "hello" | tr 'a-z' 'A-Z' # 小写转大写 → HELLO[^3] echo "123" | tr '0-9' '9876543210' # 数字转换 → 876[^3] ``` 2. **字符删除**(`-d` 选项) 删除指定字符集中的字符: ```bash echo "Phone: 123-456" | tr -d '[:digit:]-' # 删除数字和横线 → Phone: [^2] ``` 3. **字符压缩**(`-s` 选项) 将重复字符压缩为单个: ```bash echo "too many spaces" | tr -s ' ' # 压缩连续空格 → too many spaces[^1] ``` 4. **字符类操作** 使用预定义字符类简化操作: ```bash echo "UPPER lower" | tr '[:upper:]' '[:lower:]' # 大写转小写 → upper lower echo "Text!@#" | tr -d '[:punct:]' # 删除标点 → Text ``` --- #### 二、高级用法示例 1. **ROT13 加密/解密** ```bash echo "secret" | tr 'A-Za-z' 'N-ZA-Mn-za-m' # 加密 → frperg[^4] echo "frperg" | tr 'A-Za-z' 'N-ZA-Mn-za-m' # 解密 → secret ``` 2. **文件内容批量处理** 将文件中的换行符替换为逗号: ```bash cat data.txt | tr '\n' ',' # 生成逗号分隔字符串 ``` 3. **删除不可见字符** 删除 Windows 文件中的回车符 `\r`: ```bash tr -d '\r' < winfile.txt > unixfile.txt ``` --- #### 三、关键注意事项 1. **字符集映射规则** - 若 `SET1` 比 `SET2` 长,`SET2` 的最后一个字符会被重复使用 ```bash echo "abcde" | tr 'abcde' '12' # 输出 11222 ``` - 支持字符范围(如 `a-z`)、八进制转义(如 `\012`)和命名字符类 2. **不支持正则表达式** `tr` 只能处理单个字符,不支持多字符模式匹配(需用 `sed` 或 `awk`) 3. **输入输出限制** - 不接受文件名参数,必须通过管道或重定向输入 - 无法直接修改源文件,需重定向保存结果: ```bash tr ';' ',' < input.csv > output.csv ``` --- ### 典型应用场景 | 场景 | 命令示例 | 效果 | |------|----------|------| | 路径斜杠转换 | `echo "C:\Windows" | tr '\\' '/'` | `C:/Windows` | | 删除空格 | `echo " a b c " | tr -d ' '` | `abc` | | 生成序列 | `echo {1..5} | tr ' ' '\n'` | 竖排数字列表 | | 编码转换 | `echo "Привет" | tr-Яа-я' 'A-Za-z'` | 西里尔→拉丁字母 | > 提示:复杂文本处理(如含空格的 CSV 解析)建议结合 `awk` 或专用工具[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值