tr是组成单行命令之中必不可少的一部分,其作用不容小视
tr可以对标准输入的字符进行相对应的替换,删除或者压缩,可以将一组命令替换为另一组的命令,所以常被称为 转换命令 translate命令
常见的tr的调用格式为
tr [options] set1 set2
将tr收到的标准输入字符从set1字符集 转换为 set2字符串,然后进行相对应的输出
如果set1和set2的长度不相等,那set2会不断重复最后一个字符串,如果超过了长度,则会被忽略
我们可以利用如下的命令,将大写的字符串,转换为小写的
echo “HELLO WHO IS THIS” | tr ‘A-Z’ ‘a-z’
hello who is this
A-Z a-z都是集合,可以按照需要来追加字符类
这就是起始字符-终止字符,一个连续的字符序列,会被视为一个包含了是三个元素的集合
如果不是一个连续的字符序列,会被认为是 起始字符 – 终止字符这三个集合组成的集合
而且,可以使用像是 ‘\t’ ‘\n’这种特殊字符
常见的用法有.进行加密和解密
echo 12345 | tr ‘0-9’ ‘9876543210’
echo 87654 | tr ‘9876543210’ ‘0-9’
ROT13就是基于这个原理做的加解密算法
cat text | tr ‘\t’ ‘ ‘
用tr来删除字符
tr有一个选项 -d 可以通过指定需要被删除的字符合集,将出现在stdin的特定字符清除掉
cat file.txt | tr -d ‘[set1]’
不需要set1
echo “Hello 123 world 456” | tr -d ‘0-9’
hello world
用tr来压缩字符
tr -s的选项可以压缩输入中重复的字符,方法
echo “GNU is not UNIX. Recurisive right | tr -s ‘ ‘
我们可以利用tr命令来进行数学运算
cat sum.txt
1
2
3
4
5
cat sum.txt | echo $[$(tr ‘\n’ ‘+’) 0]
15
实际上我们使用的算术字符串是
echo $[1+2+3+4+5+0]
我们利用tr 将\n替换为 +
因为字符串的尾部多了一个操作符 + ,为抵消这个多出来的操作符,我们追加一个0
使用字符串类
可以使用一些简单的字符串来代替复杂的字符集,比如如下的字符集
alnum 字母和数字
alpha 字母
cntrl 控制字符
digit 数字
graph 图形字符
lower 小写字母
print 可打印字符
punct 标点符号
space 空格字符
upper 大写字母
xdigit 十六进制字符
例如
tr [:class:] [:class:]
tr ‘[:lower:]’ ‘[:upper:]’