《tr命令-优化版》-linux命令五分钟系列之二十五
本原创文章属于《Linux大棚》博客,博客地址为http://roclinux.cn。文章作者为rocrocket。
为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅。
===
[正文开始]
tr是translate的简写,亦即翻译,但是遗憾的是,它不能翻译句子,只能翻译单个字符。
1 tr的工作原理是什么?
先记住一点,tr命令不接受指定的文件参数,而只是对标准输入进行翻译。好了,记住这点后,我们继续。
tr的命令格式是tr SET1 SET2,凡是在SET1中的字符,都会被替换为SET2中相应位置上的字符,简单吧!
2 举个例子吧!
tr的例子其实都大同小异,看一个最简单的例子:
我们有一个包含了四个人身高的数据文件,名字叫height.txt,它的内容是这样的:
[rocrocket@rocrocket programming]$ cat height.txt
1.79 1.83
1.65 1.59
我们想搞一个恶作剧,将所有人的身高从1米级别都提高到2米级别,呵呵,一个tr就可以搞定。
[rocrocket@rocrocket programming]$ tr 1 2 < height.txt
2.79 2.83
2.65 2.59
希望你没有忘记,tr只处理标准输入,所以我们需要将height.txt通过重定向指到tr的标准输入才可以。
3 我们可以用tr来修改文件中的间隔符么?
Good idea!
当使用cut的时候,通常会被间隔符问题所困扰,我们这个时候可以考虑到tr这个命令。
还是以height.txt文件为例,其中的间隔符是空格,我们把它修改为制表符吧!
[rocrocket@rocrocket programming]$ tr ‘ ‘ ‘\11′ < height.txt
1.79 1.83
1.65 1.59
这里有一个小知识点,像制表符、换行符这些字符不好表示,我们可以考虑使用ASCII的八进制形式来表示,制表符的八进制形式是11,回车是15,
换行是12。而在tr命令中,可以使用\nnn形式表示八进制形式的字符。如果你实在记不住这些编号,那么用\t表示制表符你总该可以记住吧!(\n代表
新行,\r代表回车)
这下,你应该可以理解上面那条命令的作用了吧。如果你仍然怀疑,那么,看看下面这条命令,你就该心服口服了:
[rocrocket@rocrocket programming]$ tr ‘ ‘ ‘\11′ < height.txt |sed -n l
1.79\t1.83$
1.65\t1.59$
看!空格的的确确被替换成了制表符喽!
4 使用tr能把文章中的小写都转换成大写么?
这个正是tr所擅长的地方。
加入我们拥有一个文件叫做word.txt,里面包含的内容是AbcdE。
那么最简单的替换大小写的方法是:
[rocrocket@rocrocket programming]$ cat word.txt
AbcdE
[rocrocket@rocrocket programming]$ tr ‘a-z’ ‘A-Z’ < word.txt
ABCDE
5 [CHAR*]怎么用?
这是 SET2 专用的设定,功能是重复指定的字符到与 SET1 相同长度为止
例子:
[rocrocket@rocrocket programming]$ cat number.txt
1234567890
[rocrocket@rocrocket programming]$ tr ‘1-5′ ‘[A*]’ < number.txt
AAAAA67890
6 [CHAR*REPEAT]怎么用?
这也是SET2专用的设定,功能是将CHAR重复REPEAT次数。其中REPEAT次数可以用八进制数表示,但记得要以0开头表示八进制数。
例子:
[rocrocket@rocrocket programming]$ tr ‘1-9′ ‘[A*5]BCDE’ < number.txt
AAAAABCDE0
7 在tr中还有哪些表示集合的符号呢?
[:alnum:] :所有字母字符与数字
[:alpha:] :所有字母字符
[:blank:] :所有水平空格
[:cntrl:] :所有控制字符
[:digit:] :所有数字
[:graph:] :所有可打印的字符(不包含空格符)
[:lower:] :所有小写字母
[:print:] :所有可打印的字符(包含空格符)
[:punct:] :所有标点字符
[:space:] :所有水平与垂直空格符
[:upper:] :所有大写字母
[:xdigit:] :所有 16 进位制的数字
例子:
将所有的数字都转换为字符x。
[rocrocket@rocrocket programming]$ tr [:alnum:] ‘[x*]’ < number.txt
xxxxxxxxxx
8 tr里面包含SET1和SET2,那如果出现两个集合的大小不同的情况,tr如何处理呢?
这个问题,最好的解决办法就是做实验啊。
第一种情况是SET1>SET2:
[rocrocket@rocrocket programming]$ tr 1-5 AB < number.txt
ABBBB67890
结论一下子就出来了,SET1中多出来的字符都会和SET2中最后一个字符相对应。
第二种情况SET1<SET2:
[rocrocket@rocrocket programming]$ tr 1-3 ABCDE < number.txt
ABC4567890
很明了,SET2中多余的部分将被抛弃。
9 讲一讲tr命令的-s选项吧!
这个-s选项,是专门针对SET1起作用的,意思是如果发现有连续的SET1里的字符,就把它们缩减为1个。
一个很经典的应用就是把不规律的空格缩减为一个空格:
[rocrocket@rocrocket programming]$ cat spaces.txt
How are you?
Fine! Thank you!
[rocrocket@rocrocket programming]$ tr -s ‘ ‘ ‘ ‘ < spaces.txt
How are you?
Fine! Thank you!
效果很明显,用户很满意。恩!
10 -d选项咋用?
-d选项是用来删除字符用的。格式是这样的:tr -d charset
[rocrocket@rocrocket programming]$ tr -d ‘ ‘ < spaces.txt
Howareyou?
Fine!Thankyou!
看,该有的空格都没了…这就是-d的作用,把空格都删除了!
如果你想把文章中的数字都删除,就tr -d [0-9] < filename就可以了。
总结:
1、tr命令没有用‘’来引住命令,而sed需要使用‘’来引住命令
2、tr比较侧重单字符,而sed侧重整行
3、cut命令(-b,-c,-f(一般与-d 同时使用)),也是处理字符,但是却是提取出字符输出,而tr是处理字符后输出整行
4、都是以行为单位读入缓冲区里处理
tr命令参数:
查找替换:‘SET1’ ‘SET2’ 用char2数组中的字符替换对应char1数组中的字符,可以使用[0-9],[a-z]等这样的表示字符范围的表达式
删除:-d ‘SET1’ 删除字符集SET1中的字符
压缩相同字符:-s 'char'
《tr命令-优化版》-linux命令五分钟系列之二十五的更多相关文章
- 《sed的流艺术之四》-linux命令五分钟系列之二十四
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- 《sed的流艺术之二》-linux命令五分钟系列之二十二
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- 《paste命令》-linux命令五分钟系列之二十
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- 《sort帮你排序》-linux命令五分钟系列之二十六
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- 《sed的流艺术之三》-linux命令五分钟系列之二十三
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- 《sed的流艺术之一》-linux命令五分钟系列之二十一
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- 《sort命令的k选项大讨论》-linux命令五分钟系列之二十七
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- 《service》-“linux命令五分钟系列”之二
本原创文章属于<Linux大棚>博客. 博客地址为http://roclinux.cn. 文章作者为roc 希望您能通过捐款的方式支持Linux大棚博客的运行和发展.请见“关于捐款” == ...
- Adrnoid开发系列(二十五):使用AlertDialog创建各种类型的对话框
AlertDialog能够生成各种内容的对话框.可是每种对话框都会有这样的的结构: 类似下边这样的的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTA ...
随机推荐
- 大数据与可靠性会碰撞出什么样的Spark?
可靠性工程领域的可靠性评估,可靠性仿真计算,健康检测与预管理(PHM)技术,可靠性试验,都需要大规模数据来进行支撑才能产生好的效果,以往这些数据都是不全并且收集困难,而随着互联网+的大数据时代的来临, ...
- 在C#中我们能调用一个类的私有方法吗
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:在C#中我们能调用一个类的私有方法吗.
- Redis: OOM command not allowed when used memory > ‘maxmemory
Redis: OOM command not allowed when used memory > ‘maxmemory’ 解决方式: $ vim /etc/redis/6903.conf ma ...
- 什么是Scale Up和Scale Out?
导读:Scale Out(也就是Scale horizontally)横向扩展,向外扩展 Scale Up(也就是Scale vertically)纵向扩展,向上扩展 无论是Scale Out,Sca ...
- Hadoop权威指南(中文版,第2版)【分享】
下载地址 Hadoop权威指南(中文版,第2版) http://download.csdn.net/download/u011000529/5726789 (友情提示:请点击右下的 “联通下载” 或者 ...
- 启用PowerShell Web Access
Windows PowerShell Web Access(PSWA)是 Windows Server 2012 中的新功能,充当 Windows PowerShell 网关,允许远程计算机基于 We ...
- iOS设计模式之生成器
iOS设计模式之生成器 1.生成器模式的定义 (1): 将一个复杂的对象的构件与它的表示分离,使得相同的构建过程能够创建不同的表示 (2): 生成器模式除了客户之外还包括一个Director(指导者) ...
- 正尝试在 OS 载入程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内执行托管代码,这样做会导致应用程序挂起。
出错提示: 正尝试在 OS 载入程序锁内执行托管代码. 不要尝试在 DllMain 或映像初始化函数内执行托管代码,这样做会导致应用程序挂起. 原因分析: .NET2.0中添加了42种非常强大的调试助 ...
- sqrt 源代码
stap -v -e 'probe process("/usr/local/mysql56/bin/mysqld").function("*@/usr/src/mysql ...
- (转载)Ant教程
ant教程(一) 写在所有之前 为了减少阅读的厌烦,我会使用尽量少的文字,尽量明白的表达我的意思,尽我所能吧.作为一个学习者,在我的文章中会存在各种问题,希望热心人指正.目录大概是这样 ant教程 ( ...