tr命令
点击此处打开本章pdf文档 作用:主要用于删除文件中控制字符或进行字符转换。
常用选项的tr命令格式为:
tr -s -c -d ["string1"] ["string2"] input_file
解释:
-c 用string1的字符集的补集替换此string1,要求字符集为ASCII
-d 删除string中所有输入字符
-s 删除所有重复出现字符序列,只保留一个,即将重复出现字符串压缩为一个字符串
input_file是转换文件名。
使用tr时,可以指定字符串序列或范围作为形成字符串的模式,指定字符串1或字符串2的内容时,只能使用单字符或
字符串范围或列表。
[a-z] a-z内的字符组成的字符串
[A-Z] A-Z内的字符组成的字符串
[0-9] 数字串
/octal 一个三位的八进制数,对应有效的ASCII字符
[o*n] 表示字符o重复出现指定次数n。如[o*2]匹配oo的字符串。
当用一个单字符替换一个字符串或字符范围时,注意字符并不放在方括号里([])。一些系统也可以使用方括号,例如可以
写成 ["\012"]或"\012"。tr也允许不加引号,因此命令中看到单引号而不是双引号时也不要感到奇怪。
像大多数系统工具一样, tr 也受特定字符的影响。因此如果要匹配这些字符,需使用反斜线屏蔽其特殊含义。例如,
用 \{指定花括号左边可以屏蔽其特殊含义。
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
a、去除重复出现的字符
创建文件oops.txt,内容为:
[root@localhost ~]# cat oops.txt
And the cowwwwwws went homeeeeeeee
Or did theyyyy
在这里,对象是字符,目的是去重,所以使用-s选项:
[root@localhost ~]# tr -s "[a-z]" < oops.txt
And the cows went home
Or did they
也可以这样,利用管道冲送:
[root@localhost ~]# cat oops.txt | tr -s "[a-z]"
And the cows went home
Or did they
b、删除空行
创建文件plane.txt,内容为:
[root@localhost ~]# cat plane.txt
987932 Spitfire
190992 Lancaster
238991 Typhoon
其实,上面的内容为:
987932 Spitfire\n\n\n 190992 Lancaster\n\n 238991 Typhoon\n
使用-s选项后应为:987932 Spitfire\n 190992 Lancaster\n 238991 Typhoon\n
换行的八进制为\012,所以:
[root@localhost ~]# tr -s "[\012]" < plane.txt
987932 Spitfire
190992 Lancaster
238991 Typhoon
c、大写到小写
大写为[A-Z]或[:upper:],小写为[a-z]或[:lower:],命令为:
[root@localhost ~]# echo "May Day,May Day,Going Down.." | tr "[A-Z]" "[a-z]"
may day,may day,going down..
小写到大写调过来就可以了。
d、删除指定字符
创建文件diary.txt,内容为:
[root@localhost ~]# cat diary.txt
monday 10:50
Tuesday 15:30
wednesday 15:39
thursday 10:30
Friday 09:30
下面删除不是字母的内容,步骤为先用换行符替代全部非字母的内容,然后删除重复的换行符。其中,替换用-c,删
除重复用-s。命令为:
[root@localhost ~]# tr -cs "[a-z][A-Z]" "[\012*]" < diary.txt
monday
Tuesday
wednesday
thursday
Friday
e、匹配多个字符
例如,hdisk.txt的内容为:
[root@localhost ~]# cat hdisk.txt
1293 hdisk3
4512 hdisk12
0000 hdisk5
4993 hdisk12
]2994 hdisk7
命令为:
[root@localhost ~]# tr "[0*4]" "*" < hdisk.txt
1293 hdisk3
4512 hdisk12
**** hdisk5
4993 hdisk12
]2994 hdisk7