本文最后更新于 269 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com
tr命令
tr转换和删除字符,指的都是字符
tr,translate的简写,主要用于压缩重复字符,删除文件中的控制字符以及进行字符转换操作。
tr[OPTION]... SET1 [SET2]
选项:
-c–C --complement:反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行转换
-d--delete:删除所有属于第一字符集的字符
-s--squeeze-repeats:把连续重复的字符以单独一个字符表示
-t--truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符
[:alnum:]:字母和数字[:alpha:]:字母[:cntrl:]:控制(非打印)字符
[:digit:]:数字[:graph:]:图形字符[:lower:]:小写字母[:print:]:可打印字符
[:punct:]:标点符号[:space:]:空白字符[:upper:]:大写字母
[:xdigit:]:十六进制字符
1 、-s 压缩重复字符
-s: squeeze-repeats,用SET1给定的字符来压缩对应的连续重复字符
[root@localhost ~]# echo "aaabbbaacccfddd" | tr -s [abcdf]
abacfd
[root@localhost ~]# echo "aaabbbaacccfddd" | tr -s [ab]
abacccfddd
[root@localhost ~]# echo "aaabbbaacccfddd" | tr -s [ac]
abbbacfddd
[root@localhost ~]#
可以使用这一特点,删除文件中的空白行,实质上跟上面一样,都是用SET1指定的字符来替换对应的重复字符
[root@localhost ~]# cat > tr.txt
1235
55566
7899
124556
[root@localhost ~]# cat tr.txt
1235
55566
7899
124556
[root@localhost ~]# cat tr.txt | tr -s ["\n"] //替换里面的换行,只剩一个
1235
55566
7899
124556
[root@localhost ~]#
2、-d 删除字符
-d:delete,删除SET1中指定的所有字符,不转换
[root@localhost ~]# echo "a12HJ13fdaADff" | tr -d "[a-z][A-Z]"
1213
[root@localhost ~]#
3、字符替换
-t:truncate,将SET1中字符用SET2对应位置的字符进行替换,一般缺省为-t
[root@localhost ~]# echo "a1213fdasf" | tr -t [afd] [AFO]
A1213FOAsF
[root@localhost ~]#
上述代码将a转换为A,f转换为F,d转换为O。
可以利用这一特点,实现大小字母的转换
[root@localhost ~]# echo "Hello World I Love You" |tr -t [a-z] [A-Z]
HELLO WORLD I LOVE YOU
[root@localhost ~]# echo "HELLO WORLD I LOVE YOU" |tr -t [A-Z] [a-z]
hello world i love you
[root@localhost ~]#
4、cat /dev/urandom | tr -cd '[:alnum:]'
产生随机数并且把除了符合[:alnum:]以外的字符全部删除