版权声明:本文为博主原创文章,未经博主允许不得转载。 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
上面两个命令都压缩了重复出现的l
和o
,第一个命令将重复的l
和o
替换成了*
,而第二个命令则压缩后不替换
使用-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
上面把所有非字母和数字的字符都转换成了*