tr命令介绍
tr命令的作用是从标准输入中替换或删除字符串,并将处理后的内容写到标准输出。
语法格式
tr [option] … set1 [set2]
常用选项
-c,-C,--complement,使用字符集set1进行替换
-d,--delete,删除匹配set1的内容,不进行替换
-s,--squeeze-repeats,在输入字符集中,若能连续不间断的匹配SET1,在删除重复出现的内容,只保一各,即将重复出现字符串压缩为一个字符串
-t,--truncate-set1,将set1截取到与set2相同的长度
字符集合:
\NNN 八进制值为NNN 的字符(1 至3 个数位)
\\ 反斜杠
\a 终端鸣响
\b 退格
\f 换页
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
字符1-字符2 从字符1 到字符2 的升序递增过程中经历的所有字符
[字符*] 在SET2 中适用,指定字符会被连续复制直到吻合设置1 的长度
[字符*次数] 对字符执行指定次数的复制,若次数以 0 开头则被视为八进制数
[:alnum:] 所有的字母和数字
[:alpha:] 所有的字母
[:blank:] 所有呈水平排列的空白字符
[:cntrl:] 所有的控制字符
[:digit:] 所有的数字
[:graph:] 所有的可打印字符,不包括空格
[:lower:] 所有的小写字母
[:print:] 所有的可打印字符,包括空格
[:punct:] 所有的标点字符
[:space:] 所有呈水平或垂直排列的空白字符
[:upper:] 所有的大写字母
[:xdigit:] 所有的十六进制数
[=字符=] 所有和指定字符相等的字符
使用tr进行字符串替换
使用tr进行字符串替换是,需要提供两个字符串,字符串1用于匹配字符串,字符串2用于处理各种转换,
1、使用tr命令将标准输入中的i替换为h
[root@mgr1 els]# echo abcdefgi |tr i h
abcdefgh
2、使用-c选项,将标准输入字符集中不与匹配abc(set1)的字符串全部替换为h(set2)
[root@mgr1 els]# echo abcdefgi |tr -c abc h
abchhhhhh
3、将文件file中的全部替换为z
[root@mgr1 els]# cat a|tr "a" z
zbcdzbcdzbcdzbcd
4、将文件file中所有的小写字符全部转换为大写(set1 和set2一定要加引号)
[root@mgr1 els]# echo abcd | tr '[a-z]' '[A-Z]'
ABCD
5、把文件中的字符替换为数字
[root@mgr1 els]# cat a|tr '[a-z]' '[0-9]'
0123
6、删除文件出现的字符abc
[root@mgr1 els]# more a
abcd
[root@mgr1 els]# cat a|tr -d 'abc'
d
[root@mgr1 els]#
注意:这里删除的字符abc,不是整体的字符串“abc”,而是a,b,c三个字符,只要文件中出现a,b,c都会被删除
7、将文件中连续出现的a压缩到一个
[root@mgr1 els]# more a
abcdaaa
[root@mgr1 els]# cat a|tr -s "a"
abcda
8、删除文件中出现的"\n"或"\t"等字符
[root@mgr1 els]# more a
abcd a
bcaaa
[root@mgr1 els]# cat a| tr -d "\n\t"
abcdabcaaa
9、删除文件中的空行
[root@mgr1 els]# more a
abcd a
bc
aaa
[root@mgr1 els]# cat a |tr -s "\n"
abcd a
bc
aaa
10、删除文件中由windows系统造成的“^M”字符
# cat a|tr -d '\r'
# cat a|tr -s '\r' '\n'
11、使用tr实现文件的加解密
# 加密
[root@mgr1 els]# echo "welcom linux" |tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' 'hijklnmABCDEFGopqrstuvwxyzOPQRSTUVWXYZHIJKLNMabcdefg'
dSZQJH ZWIbe
# 解密
[root@mgr1 els]# echo 'dSZQJH ZWIbe' |tr 'hijklnmABCDEFGopqrstuvwxyzOPQRSTUVWXYZHIJKLNMabcdefg' 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
welcom linux
12、从文本中将未在set1补集中出现的内容全部删除
[root@mgr1 els]# more a
abcdefghijklmn
[root@mgr1 els]# cat a|tr -d -c "ahj"
ahj
13、把文本中未在set1补集中出现的字符,全部使用set2补集中的字符串替换,注意,在这种场景下,set2只能一个字符生效,即使给出多个字符,也是最后一个字符生效
[root@mgr1 els]# cat a | tr -c "ahj" "z"
azzzzzzhzjzzzzz
[root@mgr1 els]# cat a | tr -c "ahj" "uvwxyz"
azzzzzzhzjzzzzz
14、压缩文件中的空格
[root@mgr1 els]# more a| tr -s ' '
abcd a nb caaa