linux常备工具之tr

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/daguanjia11/article/details/83274205

tr是translate的缩写,是用来做翻译或转换工作的。具体来讲,它可以对输入内容(stdin)进行转换或者删除。是linux管道的必备工具。下面来看几个常见的用法

替换指定字符

tr charset1 charset2 < input-file

它的作用是使用charset2中的字符来替换charset1中相同位置的字符

$ echo 'hello,world' | tr l d
heddo,wordd

上面的命令将l替换为’d’

$ echo 'hello,world' | tr he HE 
HEllo,world

上面的命令将he替换为HE

$   echo 'hello,world' | tr '[a-z]' '[A-Z]'
HELLO,WORLD

上面的命令转换了大小写。

使用-c参数来处理剩余内容

tr -c charset1 charset2 < input-file

我不太清楚这个应该怎么表达,还是来看例子吧

$ echo 'qwert!@#$%1234567' |tr -c [a-z] '*' 
qwert*************

将除了[a-z]以外的所有内容转换为*

使用-s参数压缩字符

tr -s charset1 charset2 < input-file

-s参数将charset1中重复出现的字符压缩为charset2中对应位置的字符。如果不提供charset2,则仅压缩重复出现的字符(替换为它本身)

扫描二维码关注公众号,回复: 3692886 查看本文章
$ echo 'helllo,wooooorld' | tr -s 'lo' '*'
he*,w*r*d
$ echo 'helllo,wooooorld' | tr -s 'lo'
helo,world

上面两个命令都压缩了重复出现的lo,第一个命令将重复的lo替换成了*,而第二个命令则压缩后不替换

使用-d参数删除匹配的内容

tr -d charset1 < input-file

上面的命令将会删除所有出现在charset1中的字符

$ echo 'hello,world' | tr -d 'l'
heo,word

使用-d参数来删除内容时,还可以结合-c来使用

$ echo 'hello,world' | tr -dc 'l'
lll

上面的命令删除了除了l以外的所有内容

支持的字符类

tr命令支持一下字符类

[:alnum:]:字母和数字
[:alpha:]:字母
[:cntrl:]:控制(非打印)字符
[:digit:]:数字
[:graph:]:图形字符
[:lower:]:小写字母
[:print:]:可打印字符
[:punct:]:标点符号
[:space:]:空白字符
[:upper:]:大写字母
[:xdigit:]:十六进制字符

使用上面的字符类,可以简化一些参数,例如:

$ echo 'hello,world' | tr [:lower:] [:upper:]
HELLO,WORLD

还可以这样将小写转换成大写

echo -n 'qwert!@#$%1234567'|tr -c '[:alnum:]'  '*' 
qwert*****1234567

上面把所有非字母和数字的字符都转换成了*

猜你喜欢

转载自blog.csdn.net/daguanjia11/article/details/83274205