matlab中tr什么意思,tr命令详解
tr是translate的简写,亦即翻译,但是遗憾的是,它不能翻译句⼦,只能翻译单个字符。
1 tr的⼯作原理是什么?
先记住⼀点,tr命令不接受指定的⽂件参数,⽽只是对标准输⼊进⾏翻译。好了,记住这点后,我们继续。
tr的命令格式是tr SET1 SET2,凡是在SET1中的字符,都会被替换为SET2中相应位置上的字符,简单吧!
2 举个例⼦吧!
tr的例⼦其实都⼤同⼩异,看⼀个最简单的例⼦:
我们有⼀个包含了四个⼈⾝⾼的数据⽂件,名字叫,它的内容是这样的:
$
1.79 1.83
1.65 1.59
我们想搞⼀个恶作剧,将所有⼈的⾝⾼从1⽶级别都提⾼到2⽶级别,呵呵,⼀个tr就可以搞定。
$ tr 1 2 <
2.79 2.83
2.65 2.59
希望你没有忘记,tr只处理标准输⼊,所以我们需要将通过重定向指到tr的标准输⼊才可以。
3 我们可以⽤tr来修改⽂件中的间隔符么?
Good idea!
当使⽤cut的时候,通常会被间隔符问题所困扰,我们这个时候可以考虑到tr这个命令。
还是以⽂件为例,其中的间隔符是空格,我们把它修改为制表符吧!
$ tr ' ' '\11' <
1.791.83
1.651.59
这⾥有⼀个⼩知识点,像制表符、换⾏符这些字符不好表⽰,我们可以考虑使⽤ASCII的⼋进制形式来表⽰,制表符的⼋进制形式是11,回车是15,换⾏是12。⽽在tr命令中,可以使⽤\nnn形式表⽰⼋进制形式的字符。如果你实在记不住这些编号,那么⽤\t表⽰制表符你总该可以记住吧!(\n代表新⾏,\r代表回车)
这下,你应该可以理解上⾯那条命令的作⽤了吧。如果你仍然怀疑,那么,看看下⾯这条命令,你就该⼼服⼝服了:
$ tr ' ' '\11' < |sed -n l
1.79\t1.83$
1.65\t1.59$
看!空格的的确确被替换成了制表符喽!
4 使⽤tr能把⽂章中的⼩写都转换成⼤写么?
这个正是tr所擅长的地⽅。
加⼊我们拥有⼀个⽂件叫做,⾥⾯包含的内容是AbcdE。
那么最简单的替换⼤⼩写的⽅法是:
$
AbcdE
$ tr 'a-z' 'A-Z' <
ABCDE
5 [CHAR*]怎么⽤?
这是 SET2 专⽤的设定,功能是重复指定的字符到与 SET1 相同长度为⽌
例⼦:
$
1234567890
$ tr '1-5' '[A*]' <
AAAAA67890
6 [CHAR*REPEAT]怎么⽤?
这也是SET2专⽤的设定,功能是将CHAR重复REPEAT次数。其中REPEAT次数可以⽤⼋进制数表⽰,但记得要以0开头表⽰⼋进制数。例⼦:
$ tr '1-9' '[A*5]BCDE' <
AAAAABCDE0
7 在tr中还有哪些表⽰集合的符号呢?
[:alnum:] :所有字母字符与数字
[:alpha:] :所有字母字符
[:blank:] :所有⽔平空格
[:cntrl:] :所有控制字符
[:digit:] :所有数字
[:graph:] :所有可打印的字符(不包含空格符)
[:lower:] :所有⼩写字母
[:print:] :所有可打印的字符(包含空格符)
[:punct:] :所有标点字符
[:space:] :所有⽔平与垂直空格符
[:upper:] :所有⼤写字母
[:xdigit:] :所有 16 进位制的数字
例⼦:
将所有的数字都转换为字符x。
$ tr [:alnum:] '[x*]' <
xxxxxxxxxx
8 tr⾥⾯包含SET1和SET2,那如果出现两个集合的⼤⼩不同的情况,tr如何处理呢?
这个问题,最好的解决办法就是做实验啊。
第⼀种情况是SET1>SET2:
$ tr 1-5 AB <
ABBBB67890
结论⼀下⼦就出来了,SET1中多出来的字符都会和SET2中最后⼀个字符相对应。
第⼆种情况SET1
$ tr 1-3 ABCDE <
重定向过多是什么意思ABC4567890
很明了,SET2中多余的部分将被抛弃。
9 讲⼀讲tr命令的-s选项吧!
这个-s选项,是专门针对SET1起作⽤的,意思是如果发现有连续的SET1⾥的字符,就把它们缩减为1个。⼀个很经典的应⽤就是把不规律的空格缩减为⼀个空格:
$
How    are                you?
Fine          Thank  you
$ tr -s ' ' ' ' <
How are you?
Fine Thank you
效果很明显,⽤户很满意。恩!
10 -d选项咋⽤?
-d选项是⽤来删除字符⽤的。格式是这样的:tr -d charset
$ tr -d ' ' <
How  are  you?
FineThankyou
看,该有的空格都没了…这就是-d的作⽤,把空格都删除了!
如果你想把⽂章中的数字都删除,就tr -d [0-9] < filename就可以了。
11 -c选项的神奇
这个参数能删除指定字符外的补集。
root@ubuntu:/test# cat file
a b c 1 2 3 a b c
root@ubuntu:/test# tr -c 'a-z \n' 'x'
a b c x x x a b c
这把把除⼩写字母,空格,换⾏符以外的字符替换成x。
注:都可以⽤sed 来完成。
eval /dev/null 2>&1||head -c 10)随机⽣成10个字符串