设为首页 收藏本站
查看: 233|回复: 0

[经验分享] linux中字符转换命令-tr的用法

[复制链接]

尚未签到

发表于 2016-3-19 11:30:11 | 显示全部楼层 |阅读模式
  可以把tr看作为一个简化的sed工具,tr表示为:translate。tr命令主要用于实现以下两个功能
  


  • 替换操作的字符串转换。
  • 删除操作的字符串转换,可以很容易的删除一些控制字符或者是空行。

tr命令能够实现的功能,都能够用sed命令来实现。但就具体的替换功能来说,tr用起来更容易,也比较简单。




一,命令格式

tr [option] ["string1"] ["string2"] < file常用的选项有:


  • 默认选项。就是没有任何选项的时候,tr默认为替换操作,就是将string1在文件中出现的字符替换为string2中的字符,这里要注意的是替换关系。
  • -c选项,用string1中字符的补集替换string1,这里的字符集为ASCII。
  • -d选项,删除文件中所有在string1中出现的字符。
  • -s选项,删除文件中重复并且在string1中出现的字符,只保留一个。

-c选项在使用时,只是将string1替换为现在的补集,如在使用

[iyunv@localhost client]# echo "hello world,root,2012" | tr -c "0-9" "*"
*****************2012*可以看出,我们使用0-9,添加-c选项后,会把0-9替换为其补集,这时补集自然不包含0-9,而包含很多其它的字符,接下来就把所有的其它字符都替换成*号,但不包含数字。

如果只需要替换数字的话:

[iyunv@localhost client]# echo "hello world,root,2012" | tr "0-9" "*"
hello world,root,****

二,字符串的取值范围

指定string或string2的内容时,只能使用单字符或字符串范围或列表。


  • [a-z] a-z内的字符组成的字符串。
  • [A-Z] A-Z内的字符组成的字符串。
  • [0-9] 数字串。
  • \octal 一个三位的八进制数,对应有效的ASCII字符。
  • [O*n] 表示字符O重复出现指定次数n。因此[O*2]匹配OO的字符串。




三,控制字符的不同表达方式






速记符
含义
八进制方式

\a
Ctrl-G
铃声\007


\b
Ctrl-H
退格符\010


\f
Ctrl-L
走行换页\014


\n
Ctrl-J
新行\012


\r
Ctrl-M
回车\015


\t
Ctrl-I
tab键\011


\v
Ctrl-X
\030



注意这些控制字符,如果想在linux下输入,如我们可能需要输入^M这种字符,只需ctrl+V+M同时按下即可。




四,字符替换

这是tr的默认操作,先看下面的命令和输出

[iyunv@localhost client]# echo "hello world" | tr "a-z" "A-Z"
HELLO WORLD
[iyunv@localhost client]# echo "hello world" | tr "a-l" "A-Z"
HELLo worLD
[iyunv@localhost client]# echo "hello world" | tr "a-z" "A-H"
HEHHH HHHHD
第一行输出就是将小写换成大写。

第二行输出将小写中的a-l分别换成A-L,而将小写中的l以后的字符都不替换。

第三行输出将小写中的a-h换成A-H,而h以后的字符都换成H,因为后者的替换空间没有前面的字符空间大,所以就重复后面的H,相当于后面的字符是A-HHH......HHHHH。




如果我们想要进行大小写转换,可以按下面的输入:

tr "a-z" "A-Z" < inputfile

五,去除重复字符

这个时候,所用的选项是-s选项,如:

[iyunv@localhost client]# echo "hello world,root" | tr -s "ao"
hello world,rot
[iyunv@localhost client]# echo "hello world,root" | tr -s "lo"
helo world,rot
[iyunv@localhost client]# echo "hello world,root" | tr -s "a-z"
helo world,rot
[iyunv@localhost client]# echo "hello world,root" | tr -s "0-9"
hello world,root
第一行表示将输入字符串中的包含在"ao"字符集中的重复字符去掉,只留一个。因为"hello world,root",只有o满足条件,所以将root变成rot,把中间的两个o变成一个。


第二行将hello和root两个字符都压缩了。

第三行表示将a-z中的除复字符都去掉。

第三行表示将字符串中的重复的且重复字符在0-9字符集中的字符去掉,这里没有。




如果我们想要去掉空行,可以这样操作:

tr -s "\n" < inputfile 或者 tr -s "\012" <inputfile // 这两个是一样的。就是将重复的换行符去掉,只留一个。


六,删除字符

-d选项和-s选项类似,只不过-d选项会删除所有出现的字符。

[iyunv@localhost client]# echo "hello world,root" | tr -d "a-h"
llo worl,root
[iyunv@localhost client]# echo "hello world,root,2012" | tr -d "a-z"
,,2012
[iyunv@localhost client]# echo "hello world,root,2012" | tr -d "0-9"
hello world,root,


  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-192815-1-1.html 上篇帖子: Linux字符设备知识点/*嵌入式学习*/ 下篇帖子: v9.5在Linux下使用命令行安装DB2
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表