1. 用途
tr,translate的简写,主要用于压缩重复字符,删除文件中的控制字符以及进行字符转换操作。
2. 语法
tr[OPTION]...SET1SET2]
3. 参数
3.1 -s 压缩重复字符
-s: squeeze-repeats,用SET1指定的字符来替换对应的重复字符 (replace each input sequence of a repeated character that islisted in SET1 with a single occurrence of that character)
- xiaosi@Qunar:~/test$ echo"aaabbbaacccfddd"|-sabcdf] // abacfd
可以使用这一特点,删除文件中的空白行,实质上跟上面一样,都是用SET1指定的字符来替换对应的重复字符
test$ cat b.txt
3.2 -d 删除字符
-d:delete,删除SET1中指定的所有字符,不转换(delete characters in SET1,do not translate)
"a12HJ13fdaADff"d"[a-z][A-Z]"
3.3 字符替换
-t:truncate,将SET1中字符用SET2对应位置的字符进行替换,一般缺省为-t
- tafd]AFO// A1213FOAsF
上述代码将a转换为A,f转换为F,d转换为O。
可以利用这一特点,实现大小字母的转换
"Hello World I Love You"azAZ]
[:lower:]upper:]
HELLO WORLD I LOVE YOU
:]
hello world i love you
备注:
字符集合如下
\NNN八进制值的字符NNN(1to3为八进制值的字符)
\\反斜杠
\aCtrlG铃声
\bH退格符
\fL走行换页
\nJ新行
\rM回车
\tI tab键
\vX水平制表符
CHAR1CHAR2从到的所有字符按照ASCII字符的顺序
CHAR*]in SET2,copies of CHAR until length of SET1
*REPEATREPEAT copies of CHARREPEAT octalifstarting with0
alnum所有的字母和数字
alpha所有字母
blank水平制表符,空白等
cntrl所有控制字符
digit所有的数字
graph所有可打印字符,不包括空格
所有的小写字符
print所有可打印字符,包括空格
punct所有的标点字符
space所有的横向或纵向的空白
所有大写字母
3.4 字符补集替换
-c:complement,用SET2替换SET1中没有包含的字符
test$ cat atxt
Monday09:00
Tuesday10
Wednesday1011
Thursday1130
Friday0800
Saturday0740
Sunday00
c"[a-z][A-Z]""#"st"\n"
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
上面代码中 tr -c "[a-z][A-Z]" "#" 表示将除大小字母以外的所有的字符都替换为#。
上面代码可优化为:
cs"\n"
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday