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 码升序从 CHAR1 到 CHAR2 的所有连续字符,如 a-z、0-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 命令执行转换操作,什么情况下执行删除行为,再与管道符 | 配合使用,几乎能处理所有的字符处理工作。