linux字符替换、去重、删除 - tr

2018-07-03 17:31:14

tr 命令可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符。

tr [OPTION]... SET1 [SET2]
-c  对SET1里字符取反
-d  删除SET1里字符,不转变
-s  把SET1里指定的多个连续重复的字符替换成单个 \
    如果指定了SET2,那么会先把SET1里字符替换成SET2 \
    然后再根据SET2里去重
-t  裁剪SET1到长度 SET2

'A-Z' 和 'a-z' 都是集合,可以自己指定比如 'ab,.','a-z0-9'等都是集合

[root@192 tmp]# echo 'HELLO freecls' | tr 'A-Z' 'a-z'
hello freecls
#删除A-Z和=字符
[root@192 tmp]# echo 'HELLO====freecls' | tr -d 'A-Z='
freecls

#删除非A-Z和=字符
[root@192 tmp]# echo 'HELLO====freecls' | tr -dc 'A-Z='
HELLO====

#制表符转换为4个空格
cat file | tr '\t' '    '
#去重空格和i两个字符
[root@192 tmp]# echo 'my    website iiiis http://www.freecls.com' | tr -s ' i'
my website is http://www.freecls.com

#dos转unix
#原理是先把\r替换成\n然后对\n去重
cat dos.txt | tr -s '\r' '\n' > unix.txt

tr 可以使用的字符集合

[:alnum:]:字母和数字
[:alpha:]:字母
[:cntrl:]:控制(非打印)字符
[:digit:]:数字
[:graph:]:图形字符
[:lower:]:小写字母
[:print:]:可打印字符
[:punct:]:标点符号
[:space:]:空白字符
[:upper:]:大写字母
[:xdigit:]:十六进制字符
#标点符号转成*
[root@192 tmp]# echo 'hello ,.?/ freecls' | tr '[:punct:]' '*'
hello **** freecls


备注:
1.本系列命令都在centos7里测试,其他发行版如ubuntu、debian、fedora、opensuse等可能略微不同
2.本文只讲解常用用法,详细用法请自行利用 man 命令查看
3.原文地址http://www.freecls.com/a/2712/7b

 

©著作权归作者所有
收藏
推荐阅读
简介
天降大任于斯人也,必先苦其心志。