shell编程--tr命令

内容来源于http://baike.baidu.com/subview/316588/5133734.htm

tr是 linux命令常用命令,其全称“Text Replacer”,该命令用于进行文本替换。
tr用来从标准输入中通过替换或删除操作进行字符转换。 tr 主要用于删除文件中控制字符或进行字符转换
特别要注意一点: tr 只能进行字符的替换、缩减和删除,不能用来替换字符串。
最常用选项的tr命令格式为:
tr -c -d -s ["string1_to_translate_from"] ["string2_to_translate_to"] file
这里:
-c 用字符串1中字符集的补集替换此字符集,要求字符集为ASCII。
-d 删除字符串1中所有输入字符。
-s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。
file是转换文件名。虽然可以使用其他格式输入,但这种格式最常用。
字符范围
指定字符串1或字符串2的内容时,只能使用单字符或字符串范围或列表
[a-z] a-z内的字符组成的字符串。
[A-Z] A-Z内的字符组成的字符串。
[0-9] 数字串。
\octal 一个三位的八进制数,对应有效的ASCII字符。
[O*n] 表示字符O重复出现指定次数n。因此[O*2]匹配OO的字符串。
tr中特定控制字符的不同表达方式
速记符含义八进制方式
\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
应用例子
(1) 去除oops.txt里面的重复的小写字符 ( # -s 每次遇到重复的时候,会保留第一个字符, 后面出现的重复的时候会重新再算
[root@localhost ~]# cat oops.txt
ddddfffabccccc
lerrrrdddd
[root@localhost ~]# tr -s "[a-z]" < oops.txt > result.txt
[root@localhost ~]# cat result.txt
dfabc
lerd
(2) 删除空行
[root@localhost ~]# cat -A oops.txt
ddddfffabccccc$                                           //这里的$其实就是换行符了
$
$
lerrrrdddd$
$
d
[root@localhost ~]# tr -s "[\012]" < oops.txt > result.txt                                   //tr -s "\n" <oops.txt
[root@localhost ~]# cat result.txt
ddddfffabccccc
lerrrrdddd
d
(3) 删除所有空行
[root@localhost ~]# cat oops.txt
ddddfffabccccc
lerrrrdddd
[root@localhost ~]# tr -d "[\012]" < oops.txt > result.txt
[root@localhost ~]# cat result.txt
ddddfffabccccclerrrrdddd
(4) 小写到大写
[root@localhost ~]# cat oops.txt
ddddfffabccccc
errrrdddd
[root@localhost ~]# cat oops.txt | tr "[a-z]" "[A-Z]" > result.txt                          //把字符集1的每个字符对应替换成字符集2的每个字符
[root@localhost ~]# cat result.txt
DDDDFFFABCCCCC
ERRRRDDDD
(5) 删除指定的字符(# -d 与 -s 不同,-d会全部删除,但-s会保留第一个)
[root@localhost ~]# cat oops.txt
ddddfffabccccc
errrrdddd
[root@localhost ~]# cat oops.txt | tr -d "[bd]" > result.txt
[root@localhost ~]# cat result.txt
fffaccccc
errrr
[root@localhost ~]# cat oops.txt | tr -s "[bd]" > result.txt
[root@localhost ~]# cat result.txt
dfffabccccc
errrrd
(6) 替代指定的字符(#一对一的替代)
[root@localhost ~]# cat oops.txt
ddddfffabccccc
errrrdddd
[root@localhost ~]# cat oops.txt | tr "[bd]" "[BD]" > result.txt
[root@localhost ~]# cat result.txt
DDDDfffaBccccc
errrrDDDD

 

下面的内容转自http://blog.csdn.net/wisgood/article/details/17290707

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中多余的部分将被抛弃。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值