linux从入门到精通读薄(五)tr

5-2-2 字符转换

可以用tr命令完成sed命令的编辑操作y的类似字符转换功能,但稍有不同。在一些典型的应用中,如将大写改为小写或删除标点符号等,它是一个很快和很简单的程序。这是一个真下的过滤程序。它从标准输入中读正文,将转换结果送到标准输出。

tr命令的基本格式:

tr str1 str2

字符串str1将被转换为str2中的对应字符

[例子]

tr ABCDEFG abcdefg

将大写字母转换为对就的小写字母,可以再简化一些:

tr A-G a-g

如果str1比str2短,将str2后面的字符截去;如果str1比str2长,将str2用它最后一个字符补充使它和str1等长:

tr ABC abcde等价于tr ABC abc
tr ABCDE abc等价于tr ABCDE abccc

[-c]开关

它的作用是:用所有不在str1的字符来代替str1中的字符(即str1的补)。{原著上的这句话读不太懂,需要根据例子仔细推敲。(笔者)}

[例子]

tr -c A-Za-z0-9 ' '

这将所有非字母和非数字的字符转换为空格字符,但是有一个副作用就是留下许多连在一起的空格。可以用-s开关将str2中的任何字符的多次连续出现压缩为单个字符:

$ tr -c A-Za-z0-9 ' ' <pw.test
root awmku76tr43d6 0 0 /root/ /usr1/pc /usr/local/bin/bash
cew esJ9ohd8HH89i 501 50 /usr1/carey /usr/local/bin/bash
mot dhjd83kjdJS6D 1500 60 /usr1/mot /usr/local/bin/bash
grex cj8AjoWE8h8fs 1500 60 /usr1/mot /usr/local/bin/sh

如果你只要tr命令将某些字符的多次连续出现压缩为单个字符,可以用下面的命令:

tr -s str1

其中只指定str1,它将对str1中的字符进行压缩操作。

特殊字符(如回车和ESC)难以直接放在转换字符串中,为此提供了特殊的标记:

\b 退格字符(ctrl-h)
\n 新行字符(ctrl-j)
\r 回车字符(ctrl-m)
\t Tab字符(ctrl-i)
\\ 斜杠字符;
\000 任何字符都可以用3位8进制数表示,如:
\033 ESC字符的ASCII代码(ctrl-[)

tr命令中使用的最后一个命令开关是-d

tr -d str1

它的作用是删除字符。这一选项只指定str1,它用来提供需要删除的字符清单。