“五分钟学命令系列”之十六《tr命令》

tr是translate的简写,亦即翻译,但是遗憾的是,它不能翻译句子,只能翻译单个字符。tr命令不接受指定的文件参数,而只是对标准输入进行翻译。

tr的命令格式是tr SET1 SET2,凡是在SET1中的字符,都会被替换为SET2中相应位置上的字符。

一、替换


[root@localhost ~]# cat a.txt

1 a

1 b

1 c

[root@localhost ~]# tr 1 2 < a.txt

2 a

2 b

2 c

PS:把文本中所有的1替换成2,因为tr只对标准输入进行翻译,所有我们需要将height.txt通过重定向指到tr的标准输入才可以。实际上a.txt文本并没有更改

二、tr修饰间隔符

当使用cut的时候,通常会被间隔符问题所困扰,我们这个时候可以考虑到tr这个命令。

把空格替换成制表符


[root@localhost ~]# tr ' ' '\11' < a.txt |sed -n l

1\ta$

1\tb$

1\tc$

PS:制表符、换行符这些字符不好表示,我们可以考虑使用ASCII的八进制形式来表示,制表符的八进制形式是11,回车是15,换行是12。而在tr命令中,可以使用\nnn形式表示八进制形式的字符。如果你实在记不住这些编号,那么用\t表示制表符。(\n代表新行,\r代表回车)

三、大小写转换


[root@localhost ~]# cat a.txt

abCeDsW

[root@localhost ~]# tr 'a-z' 'A-Z' < a.txt

ABCEDSW

[root@localhost ~]# tr 'A-Z' 'a-z' < a.txt

abcedsw

四、[CHAR*]参数

这是 SET2 专用的设定,功能是重复指定的字符到与 SET1 相同长度为止


[root@localhost ~]# cat a.txt

123456789

[root@localhost ~]# tr '1-4' '[B*]' < a.txt

BBBB56789

五、[CHAR*REPEAT]参数

也是SET2专用的设定,功能是将CHAR重复REPEAT次数。其中REPEAT次数可以用八进制数表示,但记得要以0开头表示八进制数。


[root@localhost ~]# cat a.txt

123456789

[root@localhost ~]# tr '1-9' '[A*4]BCDEF' < a.txt

AAAABCDEF

六、tr中其他表示集合的符号

[:alnum:] :所有字母字符与数字

[:alpha:] :所有字母字符

[:blank:] :所有水平空格

[:cntrl:] :所有控制字符

[:digit:] :所有数字

[:graph:] :所有可打印的字符(不包含空格符)

[:lower:] :所有小写字母

[:print:] :所有可打印的字符(包含空格符)

[:punct:] :所有标点字符

[:space:] :所有水平与垂直空格符

[:upper:] :所有大写字母

[:xdigit:] :所有 16 进位制的数字

例子如下:将所有的数字都转换为子母X


[root@localhost ~]# cat a.txt

123456789

[root@localhost ~]# tr [:alnum:] '[X*]' < a.txt

XXXXXXXXX

七、tr里面包含SET1和SET2,那如果出现两个集合的大小不同的情况,tr如何处理


[root@localhost ~]# cat a.txt

123456789

[root@localhost ~]# tr 1-5 AB < a.txt

ABBBB6789

[root@localhost ~]# tr 1-3 ABCDEF < a.txt

ABC456789

PS:当SET1>SET2时,SET1中多出来的字符都会和SET2中最后一个字符相对应;当SET1<SET2时,SET2中多余的部分将被抛弃。

八、-s选项意思

-s选项,是专门针对SET1起作用的,意思是如果发现有连续的SET1里的字符,就把它们缩减为1个


[root@localhost ~]# cat a.txt

a b   c d     e

[root@localhost ~]# tr -s ' ' ' ' < a.txt

a b c d e

PS:把多个空格统一缩减为1个

九、-d选项意思

-d选项是用来删除字符用的


[root@localhost ~]# tr -d ' ' < a.txt

abcde

PS:把空格符全部删除

weinxin
聂扬帆博客
一个分享IT运维相关工作经验和实战技巧的个人博客

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: