1. 用途@H_403_3@
tr,translate的简写,主要用于压缩重复字符,删除文件中的控制字符以及进行字符转换操作。@H_403_3@
2. 语法@H_403_3@
3.1 -s 压缩重复字符@H_403_3@
-s: squeeze-repeats,用SET1指定的字符来替换对应的重复字符 (replace each input sequence of a repeated character that is@H_403_3@listed in SET1 wi@H_403_3@th a single occurrence of that character@H_403_3@)@H_403_3@
可以使用这一特点,删除文件中的空白行,实质上跟上面一样,都是用SET1指定的字符来替换对应的重复字符
test$ cat b@H_403_3@.@H_403_3@txt@H_403_3@I like football@H_403_3@ Football@H_403_3@is very fun@H_403_3@!@H_403_3@ Hello@H_403_3@ txt@H_403_3@[@H_403_3@"\n"@H_403_3@]@H_403_3@ I like football@H_403_3@ !@H_403_3@ Hello@H_403_3@
3.2 -d 删除字符@H_403_3@
-d:delete,删除SET1中指定的所有字符,不转换(delete characters in SET1,do not translate)
"a12HJ13fdaADff"@H_403_3@d@H_403_3@"[a-z][A-Z]"@H_403_3@1213@H_403_3@ "a1213fdasf"@H_403_3@d@H_403_3@adfs@H_403_3@]@H_403_3@ 1213@H_403_3@
3.3 字符替换@H_403_3@
-t:truncate,将SET1中字符用SET2对应位置的字符进行替换,一般缺省为-t@H_403_3@
上述代码将a转换为A,f转换为F,d转换为O。
可以利用这一特点,实现大小字母的转换
"Hello World I Love You"@H_403_3@a@H_403_3@z@H_403_3@A@H_403_3@Z@H_403_3@]@H_403_3@HELLO WORLD I LOVE YOU@H_403_3@ "HELLO WORLD I LOVE YOU"@H_403_3@]@H_403_3@ hello world i love you@H_403_3@
[:@H_403_3@lower@H_403_3@:]@H_403_3@upper@H_403_3@:]@H_403_3@
HELLO WORLD I LOVE YOU@H_403_3@
:]@H_403_3@
hello world i love you@H_403_3@
字符集合如下
\NNN@H_403_3@八进制值的字符@H_403_3@NNN@H_403_3@(@H_403_3@1@H_403_3@to@H_403_3@3@H_403_3@为八进制值的字符)@H_403_3@
\\@H_403_3@反斜杠@H_403_3@
\a@H_403_3@Ctrl@H_403_3@G@H_403_3@铃声@H_403_3@
\b@H_403_3@H@H_403_3@退格符@H_403_3@
\f@H_403_3@L@H_403_3@走行换页@H_403_3@
\n@H_403_3@J@H_403_3@新行@H_403_3@
\r@H_403_3@M@H_403_3@回车@H_403_3@
\t@H_403_3@I tab@H_403_3@键@H_403_3@
\v@H_403_3@X@H_403_3@水平制表符@H_403_3@
CHAR1@H_403_3@CHAR2@H_403_3@从@H_403_3@到@H_403_3@的所有字符按照@H_403_3@ASCII@H_403_3@字符的顺序@H_403_3@
CHAR@H_403_3@*]@H_403_3@in SET2@H_403_3@,@H_403_3@copies of CHAR until length of SET1@H_403_3@
*@H_403_3@REPEAT@H_403_3@REPEAT copies of CHAR@H_403_3@REPEAT octal@H_403_3@if@H_403_3@starting with@H_403_3@0@H_403_3@
alnum@H_403_3@所有的字母和数字@H_403_3@
alpha@H_403_3@所有字母@H_403_3@
blank@H_403_3@水平制表符,空白等@H_403_3@
cntrl@H_403_3@所有控制字符@H_403_3@
digit@H_403_3@所有的数字@H_403_3@
graph@H_403_3@所有可打印字符,不包括空格@H_403_3@
所有的小写字符@H_403_3@
print@H_403_3@所有可打印字符,包括空格@H_403_3@
punct@H_403_3@所有的标点字符@H_403_3@
space@H_403_3@所有的横向或纵向的空白@H_403_3@
所有大写字母@H_403_3@
3.4 字符补集替换@H_403_3@
-c:complement,用SET2替换SET1中没有包含的字符
test$ cat a@H_403_3@txt@H_403_3@
Monday@H_403_3@@H_403_3@09@H_403_3@:@H_403_3@00@H_403_3@
Tuesday@H_403_3@10@H_403_3@
Wednesday@H_403_3@10@H_403_3@11@H_403_3@
Thursday@H_403_3@11@H_403_3@30@H_403_3@
Friday@H_403_3@08@H_403_3@00@H_403_3@
Saturday@H_403_3@07@H_403_3@40@H_403_3@
Sunday@H_403_3@00@H_403_3@
c@H_403_3@"[a-z][A-Z]"@H_403_3@@H_403_3@"#"@H_403_3@s@H_403_3@t@H_403_3@"\n"@H_403_3@
Monday@H_403_3@
Tuesday@H_403_3@
Wednesday@H_403_3@
Thursday@H_403_3@
Friday@H_403_3@
Saturday@H_403_3@
Sunday@H_403_3@
上面代码中 tr -c "[a-z][A-Z]" "#" 表示将除大小字母以外的所有的字符都替换为#。
上面代码可优化为: