预备知识
tr [options] set1 set2
将来自stdin的输入字符从set1映射到set2,然后将输出写入stdout(标准输出)。set1和set2是字符类或字符集。如果两个字符集的长度不相等,那么set2会不断重复其最后一个字符,直到长度与set1相同。如果set2的长度大于set1,那么在set2中超出set1长度的那部分字符全部被忽略。
实战演练
- 将输入字符由大写转换成小写
[root@shaofeng ~]# echo "HELLO WORLD" | tr 'A-Z' 'a-z'
hello world
工作原理
- tr进行数字加密和解密
[root@shaofeng ~]# echo 12345 | tr "123456789" "0-9"
01234
[root@shaofeng ~]# echo 01234 | tr "0-9" "1-9"
12345
- ROT13是一个著名的加密算法。一个函数完成加密解密
[root@shaofeng ~]# echo "tr came, tr saw, tr conquered." | tr 'a-zA-Z' 'n-za-mN-ZA-M'
ge pnzr, ge fnj, ge pbadhrerq.
[root@shaofeng ~]# echo ge pnzr, ge fnj, ge pbadhrerq. | tr 'a-zA-Z' 'n-za-mN-ZA-M'
tr came, tr saw, tr conquered.
补充内容
用tr删除字符:-d
[root@shaofeng ~]# echo 'Hello 1 World 2' | tr -d '1-2'
Hello World
字符集补集:-c
[root@shaofeng ~]# echo 'Hello 1 World 2' | tr -d -c '1-2 \n'
1 2
用tr压缩字符
[root@shaofeng ~]# echo 'Hello 1 World 2' | tr -s ' '
Hello 1 World 2
相加
[root@shaofeng ~]# cat sum.txt | echo $[ $( tr '\n' '+' ) 0 ]
15
字符类
- upper
- lower
- space
- punct
- digit
- graph
- cntrl
- alnum
- alpha
- xdigit
[root@shaofeng ~]# cat sum.txt | tr '[:lower:]' '[:upper:]'
1
2
3
4
5
HELLO WORLD
[root@shaofeng ~]# cat sum.txt
1
2
3
4
5
hello world