linux tr
来源:互联网 发布:excel中数据合并计算 编辑:程序博客网 时间:2024/06/05 23:52
tr
是Unix命令行专家工具箱中一件简约却不失精美的工具。它经常用来编写优美的单行命令,作用不容小视。tr
可以对来自标准输入的内容进行字符替换、字符删除以及重复字符压缩。它可以将一组字符变成另一组字符,因而通常也被称为转换(translate)命令。在这则攻略中,我们会看到如何使用tr
进行基本的集合转换。
2.6.1 预备知识
tr
只能通过stdin
(标准输入),而无法通过命令行参数来接受输入。它的调用格式如下:
tr [options] set1 set2
将来自stdin
的输入字符从set1
映射到set2
,然后将输出写入stdout
(标准输出)。set1
和set2
是字符类或字符集。如果两个字符集的长度不相等,那么set2
会不断重复其最后一个字符,直到长度与set1
相同。如果set2
的长度大于set1
,那么在set2
中超出set1
长度的那部分字符则全部被忽略。
2.6.2 实战演练
将输入字符由大写转换成小写,可以使用下面的命令:
$ echo "HELLO WHO IS THIS" | tr 'A-Z' 'a-z'
'A-Z'
和'a-z'
都是集合。我们可以按照需要追加字符或字符类来构造自己定制的集合。
'ABD-}'
、'aA.,'
、'a-ce-x'
以及'a-c0-9'
等均是合法的集合。定义集合也很简单,不需要书写一长串连续的字符序列,只需要使用“起始字符?终止字符”这种格式就行了。这种写法也可以和其他字符或字符类结合使用。如果“起始字符?终止字符”不是一个连续的字符序列,那么它就会被视为包含了3个元素的集合,也就是:起始字符,?,终止字符。你可以使用像'\t'
、'\n'
这种特殊字符,也可以使用其他ASCII字符。
2.6.3 工作原理
通过在tr
中使用集合的概念,我们可以轻松地将字符从一个集合映射到另一个集合中。下面通过一则示例看看如何用tr
进行数字加密和解密。
$ echo 12345 | tr '0-9' '9876543210'87654 # 已加密$ echo 87654 | tr '9876543210' '0-9'12345 # 已解密
再来看另外一个有趣的例子。
ROT13是一个著名的加密算法。在ROT13算法中,文本加密和解密都使用同一个函数。ROT13按照字母表排列顺序执行13个字母的转换。用tr
进行ROT13加密:
$ echo "tr came, tr saw, tr conquered." | tr 'a-zA-Z' 'n-za-mN-ZA-M'
得到输出:
ge pnzr, ge fnj, ge pbadhrerq.
对加密后的密文再次使用同样的ROT13函数,我们采用:
$ echo ge pnzr, ge fnj, ge pbadhrerq. | tr 'a-zA-Z' 'n-za-mN-ZA-M'
得到输出:
tr came, tr saw, tr conquered.
tr
还可以用来将制表符转换成空格:
$ tr '\t' ' ' < file.txt
2.6.4 补充内容
我们已经看到了tr
的一些基本转换功能,接下来看看tr
还能帮我们实现的其他功能。
用
tr
删除字符tr
有一个选项-d
,可以通过指定需要被删除的字符集合,将出现在stdin
中的特定字符清除掉:$ cat file.txt | tr -d '[set1]'#只使用set1,不使用set2
例如:
$ echo "Hello 123 world 456" | tr -d '0-9'Hello world# 将stdin中的数字删除并打印出来
字符集补集
我们可以利用选项
-c
来使用set1
的补集。下面的命令中,set2
是可选的:tr -c [set1] [set2]
set1
的补集意味着这个集合中包含set1
中没有的所有字符。最典型的用法是从输入文本中将不在补集中的所有字符全部删除。例如:
$ echo hello 1 char 2 next 4 | tr -d -c '0-9 \n' 1 2 4
在这里,补集中包含了除数字、空格字符和换行符之外的所有字符。因为指定了
-d
,所以这些字符全部都被删除。用
tr
压缩字符tr
命令在很多文本处理环境中大有用武之地。多数情况下,连续的重复字符应该压缩成单个字符。经常需要从事的一项任务就是压缩空白字符。tr
的-s
选项可以压缩输入中重复的字符,方法如下:$ echo "GNU is not UNIX. Recursive right ?" | tr -s ' 'GNU is not UNIX. Recursive right ?# tr -s '[set]'
让我们用一种巧妙的方式用
tr
将文件中的数字列表进行相加:$ cat sum.txt12345 $ cat sum.txt | echo $[ $(tr '\n' '+' ) 0 ]15
这一招是如何起效的?
在上面的命令中,
tr
用来将'\n'
替换成'+'
,因此我们得到了字符串"1+2+3+…5+"
,但是在字符串的尾部多了一个操作符+
。为了抵消这个多出来的操作符,我们再追加一个0。$[ operation ]
执行算术运算,因此得到下面的字符串:echo $[ 1+2+3+4+5+0 ]
如果我们利用循环从文件中读取数字,然后再进行相加,那肯定得用好几行代码。而如今只用一行就搞定了。
还可以像下面这样使用
tr
,以摈除多余的换行符:$ cat multi_blanks.txt | tr -s '\n'line1line2line3line4
在上例中,
tr
将多余的'\n'
字符合并为单一的'\n'
(换行符)。字符类
tr
可以像使用集合一样使用各种不同的字符类,这些字符类如下所示:alnum
:字母和数字。alpha
:字母。cntrl
:控制(非打印)字符。digit
:数字。graph
:图形字符。lower
:小写字母。print
:可打印字符。punct
:标点符号。space
:空白字符。upper
:大写字母。xdigit
:十六进制字符。
可以按照下面的方式选择并使用所需的字符类:
tr [:class:] [:class:]
例如:
tr '[:lower:]' '[:upper:]'
- linux tr
- linux tr
- linux tr
- linux tr
- linux tr
- linux tr
- tr linux
- linux命令---tr
- [转]linux tr
- 理解linux tr命令
- linux tr 命令
- linux tr 命令详解
- linux tr 命令详解
- linux tr命令详解
- linux tr命令详解
- linux tr命令详解
- linux tr命令详解
- linux tr命令详解
- MAC下配置环境导致默认环境配置文件失效
- "注释"的注意事项--《Clean Code》笔记
- 黑马程序员---JAVA基础---IO(十二)
- 三分钟教你学会MVC框架——基于java web开发
- Longest Palindromic Substring
- linux tr
- 学习 周 总结(2013、12、29)二
- Smarty foreach控制循环次数的实现详解
- sicily message flood
- .NET动态生成HTML,生成静态页面
- Android对话框风格Activity的设置
- 关于const
- Hadoop之php脚本调用
- SEO超级经典实用口诀及帮助解析规划