tr 格式如下:
tr [options] set1 set2
tr可以对来自标准输如的字符进行替换、删除以及压缩。他可以将一组字符变成另一组字符,因而通常也被称为转换命令。
如果两个字符集的长度不相等,那么set2会不断重复其最后一个字符,知道长度与set1相同。如果set2的长度大于set1,那么在set2中超出set1长度的那部分字符则全部被忽略。
 
1.大小写转换:
例如:echo 'HELLO WHO IS THIS' | tr 'A-Z' 'a-z'
'a-z'和'A-Z'都是集合。我们可以按照需要追加字符或字符类来构造自己的集合。
例如'ABD-'、 'aA.' 、 'a-ce-x'以及'a-c0-9'等均是合法的集合。也可以和其他字符或字符类结合使用。
 
2.加密解密:
我们也可以轻松的将字符从一个集合映射到另一个集合中。例如用tr进行数字加密和解密:
echo 12345 | tr '0-9' '9876543210'
87654 #已加密
echo 87654 | tr '9876543210' '0-9'
12345 #已解密
 
再来看另外一个有趣的例子。
ROT13是一个著名的加密算法。在rot13算法中,文本加密和解密都是使用同一个函数。ort13按照字母表排列顺序执行13个字母的转换。用tr进行rot13加密。
echo "tr come, tr saw, tr conquered." | tr 'ABCDEFGHIJKLMNOPQRSTUVWSYZabcdefghijklmnopqrstuvwsyz' 'NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm'
 
输出:ge pnzr, ge fnj, ge pbadhrerq.
 
对加密的密文可以解密:
echo "tr come, tr saw, tr conquered." | tr 'ABCDEFGHIJKLMNOPQRSTUVWSYZabcdefghijklmnopqrstuvwsyz' 'NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm'

3.用tr删除字符
tr的-d选项,可以指定需要被删除的字符集合,将出现在stdin中的特定个字符清除掉。
例如: cat file.txt | tr -d '[set1]'
例如:echo "hello 123 world 456" | tr -d '0-9'
 
4.字符集补集
我们可以利用选项-c 来使用set1的补集
最典型的用法是从输入文本中将不在补集的所有字符全部删除。例如:
echo "hello 1 char 2 next 4 | tr -d -c '0-9 \n'
 
5.用tr压缩字符
tr的-s选项可以把连续的重复字符压缩成单个字符,例如压缩空白字符:
echo "GNU is    not   UNIX. Recursive right ?" | tr -s ' '