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:把空格符全部删除

您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏