shell脚本之tr命令使用
tr命令用来进行对标准输入的内容做替换。例如
# echo \’HELLO WORLD!!!\’ | tr \”A-Z\” \”a-z\”
hello world!!!
这里的\”A-Z\”、\”a-z\”都表示集合,shell脚本中定义集合类型很简单,即指定集合序列即可,但是对于上边的情形,不得非输入所有集合类型,可以通过“开始字符-结束字符”方式进行集合定义。使用tr命令结合集合使用,可以解决很多复杂问题。
使用tr进行数据加密,解密:
# echo 456 | tr \”0-9\” \”9876543210\”
543
# echo 543 | tr \”9876543210\” \”0-9\”
456
tr进行字符替换:
# cat dept
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
# cat dept | tr \”\\t\” \” \”
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
指定-d参数删除指定字符串:
# echo \’hello 123 world 456 !!!\’ | tr -d \'{0-9}\’
hello world !!!
指定-c参数进行补集处理,通常与-d连用,删除不满足条件的字符:
# echo \’hello 123 world 456 !!!\’ | tr -d -c \'{0-9 \\n}\’
123 456
tr命令中-s参数进行字符压缩,将连续的重复字符压缩成当个字符,最常见的场景就是压缩空白格:
# echo \’hello 123 world 456 !!!\’ | tr -s \’ \’
hello 123 world 456 !!!
技巧:使用tr将文件中的字符列表相加:
# seq 5 | echo $[ $( tr \’\\n\’ \’+\’ ) 0 ]
15
解释:将\\n替换成+后,脚本输出变成$[ 1+2+3+4+5+0 ],可以直接进行加法计算,省去循环读取数字的麻烦。
tr也可以像集合一样使用各种不同的字符类。
sed和tr替换换行符:sed \’:label;N;s/,\\n/,/;b label ; tr \’\\n\’ \’,\’