tr可以对来自标准输入的内容进行字符替换、字符删除以及重复字符压缩。
tr只能通过stdin(标准输入)接收输入(无法通过命令行参数接收)。其调用格式如下:
tr [options] set1 set2
来自stdin的输入字符会按照位置从set1映射到set2(set1中的第一个字符映射到set2中的第一个字符,以此类推),然后将输出写入stdout(标准输出)。
set1和set2是字符类或字符组。如果两个字符组的长度不相等,那么set2会不断复制其最后一个字符,直到长度与set1相同。如果set2的长度大于set1,那么在set2中超出set1长度的那部分字符则全部被忽略。
字符替换
1、将set1中的字符替换为小写字符
执行:echo "a1b2c3" | tr 'a-z' 'A-Z'
输出:A1B2C3
2、将不在set1的字符替换成@
执行:echo "a1b2c3" | tr -c '0-9 ' '@'
输出:@1@2@3
3、加密和解密
ROT13是一个著名的加密算法。在ROT13算法中,字符会被移动13个位置,因此文本加密和解密都使用同一个函数:
加密:echo "root" | tr 'a-zA-Z' 'n-za-mN-ZA-M'
加密后的字符:ebbg
解密: echo "ebbg" | tr 'a-zA-Z' 'n-za-mN-ZA-M'
解密后的字符:root
字符删除
1、删除set1中的字符
执行:echo "abc123" | tr -d '0-9'
输出:abc
2、删除不在set1中的字符
执行:echo "a1b2c3" | tr -d -c '0-9 '
输出:123
重复字符压缩
执行:echo "aa11bb22" | tr -s 'a-z'
输出:a11b22
字符类
tr可以将不同的字符类作为集合使用,所支持的字符类如下所示。
alnum:字母和数字。
alpha:字母。
cntrl:控制(非打印)字符。
digit:数字。
graph:图形字符。
lower:小写字母。
print:可打印字符。
punct:标点符号。
space:空白字符。
upper:大写字母。
xdigit:十六进制字符。
执行:echo "abc123" | tr '[:lower:]' '[:upper:]'
输出:ABC123