首页>教程>Linux 命令手册> 文件内容查看与处理 >Linux tr 命令 - 文本字符转换删除工具

Linux tr 命令 - 文本字符转换删除工具

tr 命令(英文全称为 translate)是 Linux / Unix 系统中的一款轻量且高效的字符处理命令,它能够实现转换字符、删除字符,以及压缩重复字符,是文本字符操作的一款非常基础的工具,使用起来简单高效。

[!WARNING]

它只能从标准输入读取数据,把处理后的数据输出到标准输出,无法从文件读取数据,但是可以与管道符 | 配合使用,实现文件操作

tr 命令语法

tr 命令的语法结构非常的简单,但是有几处需要特别说明,以下是具体解释说明:

tr [选项]... 字符集1 [字符集2]

1)语法中各部分的解释说明:

  • [选项]...:可选的内容,用于指定命令具体执行的行为
  • 字符集1:必须的内容,指定处理的目标字符集
  • 字符集2:可选的内容,当需要转换字符时才需要指定

2)字符集的转换规则说明:

  • 如果 字符集1字符集2 的长度一致,那么会按照字符顺序进行一一对应的转换
  • 如果 字符集1字符集2 长,会自动重复 字符集2 的最后一个字符,使两个字符集的长度相同,然后进行一一对应的转换
  • 如果 字符集1字符集2 短,字符集2 后面多余的字符会被忽略,从前面取与 字符集1 长度相同部分,然后进行一一对应的转换
  • 当使用 -t 选项时,会先把 字符集1 的长度截断成与 字符集2 的长度一致,再进行一一对应的转换

3)执行的模式说明:

  • 转换行为: 同时指定 字符集1字符集2
  • 删除行为: 指定 -d 选项和 字符集1
  • 压缩重复字符: 指定 -s 选项和 字符集1
  • 如果指定多种行为,压缩重复字符在转换和删除之后执行

tr 命令使用示例

如下给出一些 tr 命令的使用示例,简要说明如何使用 tr 命令。

进行大小写转换

不使用选项,指定两个对应的字符集,会在两个字符集之间进行字符转换:

echo "HELLO LINUX" | tr 'A-Z' 'a-z'

删除特定的字符

使用 -d 选项指定需要删除的字符集,删除指定的字符:

echo "abc123def" | tr -d '0-9'

该示例指定的字符集 0-9 是数字字符集,会从内容中删除数字。

压缩连续空格

使用 -s 指定字符集为空格,会压缩连续的多个空格为一个空格:

echo "hello   linux" | tr -s ' '

保留字母数字

使用 -d 选项的同时指定 -c 选项时为指定的字符集为提供的字符集的补集,即:除提供的字符串之外的其他字符,来实现保留指定的字符集:

echo "abc123@#$XYZ" | tr -cd '[:alnum:]'

[:alnum:] 为内容字符集 字母 + 数字

截断字符集进行转换

使用 -t 选项把 字符集1 从前端截取为与 字符集2 长度相同字符集:

echo "abcde" | tr -t 'abcde' '12'

字符集2 的长度为 2, 所以把 字符集1 的长度从开始截取长度为 2 的字符集,截取的字符集为 ab

字符集 / 数组定义规则

tr 命令中的 字符集1 / 字符集2 会被解析为字符数组(ARRAY),绝大多数的字符表示本意,还支持以下转义字符、字符范围表示、字符重复扩展方式、预定义字符集,具体内容如下:

转义字符

序列含义
\NNN八进制值 NNN 对应的 ASCII 码字符,NNN 为 1~3 位八进制数字
\\反斜杠为特殊字符,需要做转义处理
\a系统提示音(BEL)
\b退格符
\f换页符
\n换行符
\r回车符
\t水平制表符
\v垂直制表符

字符范围表示

CHAR1-CHAR2: 包含按 ASCII 码升序从 CHAR1CHAR2 的所有连续字符,如 a-z0-9

字符重复扩展格式

  • [CHAR*]: 只能用于 字符集2,自动重复填充 CHAR 字符,直到与 字符集1 的长度一致
  • [CHAR*REPEAT]: 重复填充指定次数的 CHAR;如果 REPEAT 的数值以 0 开头,则按八进制数进行解析

预定义字符集

字符类含义
[:alnum:]所有的字母和数字
[:alpha:]所有的字母
[:blank:]所有的水平空白字符(空格、制表符)
[:cntrl:]所有的控制字符
[:digit:]所有的数字(0-9)
[:graph:]所有的可打印字符,不包含空格
[:lower:]所有的小写字母
[:print:]所有的可打印字符,包含空格
[:punct:]所有的标点符号
[:space:]所有水平和垂直空白字符
[:upper:]所有的大写字母
[:xdigit:]所有的十六进制字符
[=CHAR=]所有与 CHAR 等价的字符

tr 命令选项详解

tr 命令也支持少量的选项,来控制 tr 命令的具体行为,如下给出 tr 命令的所有选项的详细解释说明:

选项功能说明
-c, -C, --complement字符集1 指定为提供的 字符集1 的补集,即:除提供的 字符集1 之外的所有的字符
-d, --delete指定 tr 命令的行为为杀你除字符,当内容中的字符匹配 字符集1 中的字符时则会被删除
-s, --squeeze-repeats压缩 字符集1 中指定的连续重复字符为一个字符
-t, --truncate-set1字符集1 的长度从前端截取为与 字符集2 长度的相同的字符集,然后再一一对应
--help显示帮助信息并退出
--version显示版本信息并退出

结语

tr 命令是 Linux / Unix 系统中简单高效的字符处理工具,掌握其转义字符、字符范围表示、字符重复扩展方式、预定义字符集以及在什么情况下 tr 命令执行转换操作,什么情况下执行删除行为,再与管道符 | 配合使用,几乎能处理所有的字符处理工作。