Linux重要命令-tr

一,命令格式
tr [option] ["string1"] ["string2"] < file 


常用的选项有:
默认选项。就是没有任何选项的时候,tr默认为替换操作,就是将string1在文件中出现的字符替换为string2中的字符,这里要注意的是替换关系。
-c选项,用string1中字符的补集替换string1,这里的字符集为ASCII。
-d选项,删除文件中所有在string1中出现的字符。
-s选项,删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。
-c选项在使用时,只是将string1替换为现在的补集,如在使用

示例1:

zhouwj@zhouwj-virtual-machine:~$ echo "hello world,root,2012"|tr -c "0-9" "*"
*****************2012*zhouwj@zhouwj-virtual-machine:~$ 
 

可以看出,我们使用0-9,添加-c选项后,会把0-9替换为其补集,这时补集自然不包含0-9,而包含很多其它的字符,接下来就把所有的其它字符都替换成*号,但不包含数字。

示例2:只需要替换数字

zhouwj@zhouwj-virtual-machine:~$ 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的默认操作,先看下面的命令和输出

zhouwj@zhouwj-virtual-machine:~$ echo "hello world" | tr "a-z" "A-Z"
HELLO WORLD
zhouwj@zhouwj-virtual-machine:~$ echo "hello world" | tr "a-l" "A-Z"   
HELLo worLD

zhouwj@zhouwj-virtual-machine:~$ 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。

zhouwj@zhouwj-virtual-machine:~$  echo "TANK" |tr A-Z a-z   #大写字母转小写 
tank

zhouwj@zhouwj-virtual-machine:~$ echo 'tank zhang' | tr a-z A-Z    #小写字母转大写
TANK ZHANG

将文件file中出现的"abc"替换为"xyz"

 

# cat file | tr "abc" "xyz" > new_file

【注意】这里,凡是在file中出现的"a"字母,都替换成"x"字母,"b"字母替换为"y"字母,"c"字母替换为"z"字母。而不是将字符串"abc"替换为字符串"xyz"。

 

五,去除重复字符
这个时候,所用的选项是-s选项,如:

zhouwj@zhouwj-virtual-machine:~$ echo "hello world,root" | tr -s "ao" 
hello world,rot

zhouwj@zhouwj-virtual-machine:~$  echo "hello world,root" | tr -s "lo"  
helo world,rot

zhouwj@zhouwj-virtual-machine:~$  echo "hello world,root" | tr -s "a-z"
helo world,rot

zhouwj@zhouwj-virtual-machine:~$ 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选项会删除所有出现的字符。

zhouwj@zhouwj-virtual-machine:~$ echo "hello world,root" | tr -d "a-h" 
llo worl,root

zhouwj@zhouwj-virtual-machine:~$ echo "hello world,root,2012" | tr -d "a-z" 
 ,,2012

zhouwj@zhouwj-virtual-machine:~$ echo "hello world,root,2012" | tr -d "0-9"
hello world,root,

# cat file | tr -d "Snail" > new_file

【注意】这里,凡是在file文件中出现的'S','n','a','i','l'字符都会被删除!而不是紧紧删除出现的"Snail”字符串。

 

示例:

zhouwj@zhouwj-virtual-machine:~$ cat >aaa.txt<<EOF
> aaa
> 
> bbb
>    
> EOF
zhouwj@zhouwj-virtual-machine:~$ cat aaa.txt 
aaa

bbb
   
zhouwj@zhouwj-virtual-machine:~$ cat aaa.txt|tr 'a' 'c'  #字母c替换字母a 
ccc

bbb
   
zhouwj@zhouwj-virtual-machine:~$ cat aaa.txt|tr -d 'a'    #删除所有字母a


bbb
   

zhouwj@zhouwj-virtual-machine:~$ cat aaa.txt|tr -d '\n\t'  # 删除文件file中出现的换行'\n'、制表'\t'字符  
aaabbb   zhouwj@zhouwj-virtual-machine:~$ cat aaa.txt|tr -d '\n\t'  #删除文件file中出现的换行'\n'、制表'\t'字符  
aaabbb   zhouwj@zhouwj-virtual-machine:~$ cat aaa.txt|tr -s [a-zA-Z]   #删除重复的字母  
a

b
   
zhouwj@zhouwj-virtual-machine:~$ cat aaa.txt|tr -s '\n'    #删除空行
aaa
bbb
   
zhouwj@zhouwj-virtual-machine:~$ cat aaa.txt |tr -s '\011' '\040'   #用空格符\040替换制表符\011 
aaa

bbb
 
zhouwj@zhouwj-virtual-machine:~$

 

示例2:: 删除换行符

一个 IP 列表文件如下,实现将空行去掉,并删除逗号后面的换行,变成这样:
192.168.56.1,192.168.56.2,192.168.56.3,192.168.56.4,192.168.56.5,


[root@Jamin-SFO1 ~]# cat test.txt
192.168.56.1,

192.168.56.2,

192.168.56.3,

192.168.56.4,

192.168.56.5,
[root@Jamin-SFO1 ~]# tr -s "\r\n" "," < test.txt
192.168.56.1,192.168.56.2,192.168.56.3,192.168.56.4,192.168.56.5,

 

2、使用tr命令“统一”字母大小写

(小写 --> 大写)
# cat file | tr [a-z] [A-Z] > new_file

(大写 --> 小写)
# cat file | tr [A-Z] [a-z] > new_file

 

3、把文件中的数字0-9替换为a-j

 

# cat file | tr [0-9] [a-j] > new_file


4、删除文件file中出现的"Snail"字符

 

# cat file | tr -d "Snail" > new_file

 

【注意】这里,凡是在file文件中出现的'S','n','a','i','l'字符都会被删除!而不是紧紧删除出现的"Snail”字符串。

 

5、删除文件file中出现的换行'\n'、制表'\t'字符

 

# cat file | tr -d "\n\t" > new_file

 

不可见字符都得用转义字符来表示的,这个都是统一的。

 

6、删除“连续着的”重复字母,只保留第一个

 

# cat file | tr -s [a-zA-Z] > new_file

 

7、删除空行

 

# cat file | tr -s "\n" > new_file

 

8、删除Windows文件“造成”的'^M'字符

 

# cat file | tr -d "\r" > new_file
或者
# cat file | tr -s "\r" "\n" > new_file

 

【注意】这里-s后面是两个参数"\r"和"\n",用后者替换前者

 

9、用空格符\040替换制表符\011

 

# cat file | tr -s "\011" "\040" >new_file

 

10、把路径变量中的冒号":",替换成换行符"\n"

 

# echo $PATH | tr -s ":" "\n"

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值