- tr 可以对来自标准输入的内容进行字符替换、字符删除以及重复字符压缩。
- tr 只能通过 stdin 而无法通过命令行参数来接受输入。
将输入字符由大写转换成小写
$ echo "HELLO WHO IS THIS" | tr 'A-Z' 'a-z'
hello who is this
'A-Z' 和 'a-z' 都是集合。定义集合:
- 定义连续集合的格式:“起始字符-终止字符”。这种写法也可以和其它字符或字符类结合使用。
- 如果“起始字符-终止字符”不是一个连续的字符序列,那么它就会被视为包含了 3 个元素的集合:起始字符、-、终止字符。
用 tr 进行加密和解密
用 tr 进行数字加密和解密
$ echo 12345 | tr '0-9' '9876543210'
87654 # 已加密
$ echo 87654 | tr '9876543210' '0-9'
12345 # 已解密
ROT13 加密算法
在 ROT13 算法中,文本加密和解密都使用同一个函数。ROT13 按照字母表排列顺序执行 13 个字母的转换。
# 加密
$ echo "tr came, tr saw, tr conquered." | tr 'a-zA-Z' 'n-za-mN-ZA-M'
ge pnzr, ge fnj, ge pbadhrerq.
# 解密
$ echo "ge pnzr, ge fnj, ge pbadhrerq." | tr 'a-zA-Z' 'n-za-mN-ZA-M'
tr came, tr saw, tr conquered.
用 tr 删除字符
# 将stdin中的数字删除并打印出来
$ echo "Hello 123 world 456" | tr -d '0-9'
Hello world
字符集补集
# 从输入文本中将不在补集中的所有字符全部删除
$ echo hello 1 char 2 next 4 | tr -d -c '0-9 \n'
1 2 4
在这里,补集中包含了除数字、空格字符和换行符之外的所有字符。因为指定了-d,所以这些字符全部都被删除。
用 tr 压缩字符
压缩空白字符
$ echo "GNU is not UNIX. Recursive right ?" | tr -s ' '
GNU is not UNIX. Recursive right ?
将文件中的数字列表进行相加
$ cat sum.txt
1
2
3
4
5
$ cat sum.txt | echo $[ $(tr '\n' '+') 0 ]
15
摈除多余的换行符
$ cat multi_blanks.txt | tr -s '\n'
line1
line2
line3
line4
字符类
tr 可以像使用集合一样使用各种不同的字符类。
-
alnum
:字母和数字 -
alpha
:字母 -
blank
:水平空白区 -
cntrl
:控制(非打印)字符 -
digit
:数字 -
graph
:图形字符 -
lower
:小写字母 -
print
:可打印字符 -
punct
:标点符号 -
space
:空白字符 -
upper
:大写字母 -
xdigit
:十六进制字符
$ echo "HELLO WHO IS THIS" | tr '[:upper:]' '[:lower:]'
hello who is this
网友评论