1. tr的工作原理是什么?
先记住一点,tr命令不接受指定的文件参数,而只是对标准输入进行翻译。好了,记住这点后,我们继续。
tr的命令格式是 tr SET1 SET2
凡是在SET1中的字符,都会被替换为SET2中相应位置上的字符,简单吧!
2. 举个例子吧:
tr的例子其实都大同小异,看一个最简单的例子:
我们有一个包含了四个人身高的数据文件,名字叫height.txt,它的内容是这样的:
[rocrocket@rocrocket programming]$ cat height.txt
1.79 1.83
1.65 1.59
我们想搞一个恶作剧,将所有人的身高从1米级别都提高到2米级别,呵呵,一个tr就可以搞定。
[rocrocket@rocrocket programming]$ tr 1 2 < height.txt
2.79 2.83
2.65 2.59
3. 将文件里的大写变成小写
tr 'a-z' 'A-Z' < example.txt
4. tr 的 -s 选项: repeate each input sequence ofa repeated characters that is listed in SET1 with a single occurrence of that character.
一个很经典的应用就是把不规律的空格缩减为一个空格:
[rocrocket@rocrocket programming]$ cat spaces.txt
How are you?
Fine! Thank you!
[rocrocket@rocrocket programming]$ tr -s ‘’ ‘ ’ < spaces.txt
How are you?
Fine! Thank you!
注意: 第一个第一个‘’是没有空格的,第二个‘ ’之间有个空格。
5. tr -d 选项: delete, delete characters in SET1
[rocrocket@rocrocket programming]$ cat spaces.txt
How are you?
Fine! Thank you!
[rocrocket@rocrocket programming]$ tr -d ‘ ‘ < spaces.txt
Howareyou?
Fine!Thankyou!
看,该有的空格都没了…这就是-d的作用,把空格都删除了!
如果你想把文章中的数字都删除,就tr -d [0-9] < filename就可以了。
tr -d 还可以用来删除空行
要删除空行,可将之剔出文件。下面是一个文件p l a n e . t x t。文本间有许多空行。
plane.txt
9879932 Spitfire
190992 Lancaster
238991 Typhoon
dtdlut@dtdlut:~$ tr -s "\n" < plane.txt
plane.txt
9879932 Spitfire
190992 Lancaster
238991 Typhoon
6. 如何删除文件中除了某些字符外的所以其他字符呢?
需要用到 tr -c 命令: use the complement(补集) of SET1
例子: 下 面的文件包含一个星期的日程表。任务是从其中删除所有数字,只保留日期。
dtdlut@dtdlut:~$ cat diray.txt
mondy 1all0:5b0
Tuesday 15:00
wednesday 15:30
thurday 10:30
Fridya 09:20
dtdlut@dtdlut:~$ tr -cs "[a-z][A-Z]" "\n" < diray.txt
mondy
all
b
Tuesday
wednesday
thurday
Fridya