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:]’

发表评论

邮箱地址不会被公开。 必填项已用*标注