用tr进行替换

tr只能通过stdin(标准输入),而无法通过命令行参数来接受输入

tr [options] set1 set2

将来自stdin的输入字符从set1映射到set2,然后将输出写入stdout(标准输出)。set1和set2是字符类或字符集。如果两个字符集的长度不相等,那么set2会不断重复其最后一个字符,直到长度与set1相同。如果set2的长度大于set1,那么在set2中超出set1长度的那部分字符则全部被忽略。

1. 将输入字符由大写转换成小写

$ echo "HELLO WHO IS THIS" | tr 'A-Z' 'a-z' 

2. 简单的加密解密

$ echo 12345 | tr '0-9' '9876543210'
87654 # 已加密
$ echo 87654 | tr '9876543210' '0-9'
12345 # 已解密

3.ROT13 加密算法

$ echo "tr came, tr saw, tr conquered." | tr 'a-zA-Z' 'n-za-mN-ZA-M'

得到输出:

ge pnzr, ge fnj, ge pbadhrerq.

对加密后的密文再次使用同样的ROT13函数,我们采用:

$ echo ge pnzr, ge fnj, ge pbadhrerq. | tr 'a-zA-Z' 'n-za-mN-ZA-M'

得到输出:tr came, tr saw, tr conquered.tr

4.将制表符转换成空格

$ tr '\t' ' ' < file.txt 

其他功能:

1. 用tr删除字符

$ cat file.txt | tr -d '[set1]'
#只使用set1,不使用set2 
[hadoop@aliyun1 ~]$ echo "Hello 123 world 456" | tr -d '0-9'
Hello  world 

2. 字符集补集

我们可以利用选项-c来使用set1的补集。下面的命令中,set2是可选的:

tr -c [set1] [set2]

set1的补集意味着这个集合中包含set1中没有的所有字符。

最典型的用法是从输入文本中将不在补集中的所有字符全部删除。

[hadoop@aliyun1 ~]$ echo hello 1 char 2 next 4 | tr -d -c '0-9 \n' 
 1  2  4
[hadoop@aliyun1 ~]$ echo hello 1 char 2 next 4 | tr -d -c '0-9\n'  
124
[hadoop@aliyun1 ~]$ echo hello 1 char 2 next 4 | tr -d -c '0-9'   
124[hadoop@aliyun1 ~]$ echo hello 1 char 2 next 4 | tr -d -c ''    
[hadoop@aliyun1 ~]$ 

3.用tr压缩字符

经常需要从事的一项任务就是压缩空白字符。

tr的-s选项可以压缩输入中重复的字符

[hadoop@aliyun1 ~]$ echo "GNU is not UNIX. Recursive right ?" | tr -s ' ' 
GNU is not UNIX. Recursive right ?
用一种巧妙的方式用tr将文件中的数字列表进行相加:
[hadoop@aliyun1 ~]$ cat sum.txt 
1
2
3
4
5
[hadoop@aliyun1 ~]$ cat sum.txt  | echo $[ $(tr -s '\n' '+') 0]
15

4. 字符类tr可以像使用集合一样使用各种不同的字符类,这些字符类如下所示:

 alnum:字母和数字。

 alpha:字母。

 cntrl:控制(非打印)字符。

 digit:数字。

 graph:图形字符。

 lower:小写字母。

 print:可打印字符。

 punct:标点符号。

 space:空白字符。

 upper:大写字母。

 xdigit:十六进制字符。

例如:

[hadoop@aliyun1 ~]$ echo abcdEFG | tr [:lower:] [:upper:]
ABCDEFG

你可能感兴趣的:(linux)