tr 是Unix命令行专家工具箱中一件简约却不失精美的工具。它经常用来编写优美的单行命 令,作用不容小视。 tr 可以对来自标准输入的内容进行字符替换、字符删除以及重复字符压缩。 它可以将一组字符变成另一组字符,因而通常也被称为转换(translate)命令。
1. 用 tr 删除字符:
$ cat file.txt | tr -d '\n'
$ echo "hello 123 world 456789" | tr -d '0-9'
hello world
2. 字符集补集:
补集意味着这个集合中包含 set1 中没有的所有字符。
最典型的用法是从输入文本中将不在补集中的所有字符全部删除。例如:
$ echo hello 1 char 2 next 4 | tr -d -c '0-9 \n'
1 2 4
在这里,补集中包含了除数字、空格字符和换行符之外的所有字符。因为指定了 -d ,所以这
些字符全部都被删除。
3. 用 tr 压缩字符
tr 的 -s 选项可以压缩输入中重复的字符,方法如下:
$ echo "GNU is not UNIX." | tr -s ' '
GNU is not UNIX
4.用一种巧妙的方式用 tr 将文件中的数字列表进行相加:
$ $ cat sum.txt
1
2
3
4
5
$ cat sum.txt | echo $[ $(tr '\n' '+' ) 0 ]
15
这一招是如何起效的?
在上面的命令中, tr 用来将 '\n' 替换成 '+' ,因此我们得到了字符串 "1+2+3+…5+" ,
但是
在字符串的尾部多了一个操作符 + 。为了抵消这个多出来的操作符,我们再追加一个 0 。
$[ operation ] 执行算术运算,因此得到下面的字符串:
echo $[ 1+2+3+4+5+0 ]