Chinaunix首页 | 论坛 | 博客
  • 博客访问: 435798
  • 博文数量: 55
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1584
  • 用 户 组: 普通用户
  • 注册时间: 2013-05-04 15:15
个人简介

热衷技术,热爱交流

文章分类

全部博文(55)

文章存档

2014年(7)

2013年(48)

分类: LINUX

2014-01-22 23:07:56

tr(translate),一个很好用的字符映射命令,有以下几个优点,可以用来辅助cat ,grep,vi等命令:

(1)自定义字符集合进行字符映射

(2)处理一些特殊字符,例如'\t','\n'等

(3)删除字符或者字符集合

(4)进行字符压缩

(1)字符映射

[root@hexel ~]#echo abcdEFG | tr 'a-z' 'A-Z' --这里使用了字母集合,把小写字母替换成大写字母

ABCDEFG

注意,如果后面字符集合比前面字符集合小,结果是映射后的最后一个字符重复,以补足,例如:

[root@hexel ~]#echo abcdefgHIG | tr 'a-z' 'A-C' --后面一个字符集小    

ABCCCCCHIG

字符集合可以自定义,例如:

[root@hexel ~]#echo lnpnEFG | tr 'a-z' '0-3'

3333EFG

[root@hexel ~]#echo lnpn123EFG | tr 'a-z0-9' 'a-z1'

lnpn111EFG

(2)替换字符

例如:

[root@hexel ~/shell/tr]#cat tr.sh 

123     edf

1234    abc

现在要把制表符替换成逗号,这在处理csv文件时非常有用,比vi批量替换高效不少:

[root@hexel ~/shell/tr]#cat tr.sh | tr '\t' ','

123,edf

1234,abc

(3)删除字符(支持字符集合删除):

[root@hexel ~/shell/tr]#echo 'hello 123' | tr -d '0-9'  --删除数字

hello

相反,有时候可能要保留一类字符而删除其他所有字符,这时候可以使用-c选项指定例外字符集,例如:

[root@hexel ~/shell/tr]#echo 'hello!@#123' | tr -d -c '\n0-9' 

123

(4)压缩字符

cat可以用-s选项压缩多行连续的空白行为一行,但是无法删除空白行,使用tr可以办到(原理是把连续的\n字符压缩为一个),例如:

[root@hexel ~/shell/tr]#cat tr1.sh 

1



2



3

[root@hexel ~/shell/tr]#cat -s tr1.sh 

1


2


3

[root@hexel ~/shell/tr]#cat  tr1.sh  | tr -s '\n'

1

2

3

这种写法比grep -v后接正则表达式(^$)简单很多了。

可以对上面的结果进行求和,与循环相加相比,代码量少了很多:

[root@hexel ~/shell/tr]#cat  tr1.sh  | tr -s '\n' | echo $[ $(tr '\n' '+') 0  ]   

6

这利用了算数运算方法:

[root@hexel ~/shell/tr]#echo $[ 1+2+3+0 ]                      

6

阅读(2989) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~