欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

Linux shell tr 命令详解

程序员文章站 2022-05-25 20:29:32
linux shell tr 命令详解 1. 用途 tr,translate的简写,主要用于压缩重复字符,删除文件中的控制字符以及进行字符转换操作。 2. 语法...

linux shell tr 命令详解

1. 用途

tr,translate的简写,主要用于压缩重复字符,删除文件中的控制字符以及进行字符转换操作。

2. 语法

tr [option]... set1 [set2]

3. 参数

3.1 -s 压缩重复字符

-s: squeeze-repeats,用set1指定的字符来替换对应的重复字符 (replace each input sequence of  a  repeated  character  that  is listed in set1 with a single occurrence of that character)

xiaosi@qunar:~/test$ echo "aaabbbaacccfddd" | tr -s [abcdf] // abacfd

可以使用这一特点,删除文件中的空白行,实质上跟上面一样,都是用set1指定的字符来替换对应的重复字符

xiaosi@qunar:~/test$ cat b.txt
i like football
football is very fun!
hello
xiaosi@qunar:~/test$ cat b.txt | tr -s ["\n"]
i like football
football is very fun!
hello

3.2 -d 删除字符

-d:delete,删除set1中指定的所有字符,不转换(delete characters in set1, do not translate)

xiaosi@qunar:~/test$ echo "a12hj13fdaadff" | tr -d "[a-z][a-z]"
1213
xiaosi@qunar:~/test$ echo "a1213fdasf" | tr -d [adfs]
1213

3.3 字符替换

-t:truncate,将set1中字符用set2对应位置的字符进行替换,一般缺省为-t

xiaosi@qunar:~/test$ echo "a1213fdasf" | tr -t [afd] [afo] // a1213foasf

上述代码将a转换为a,f转换为f,d转换为o。

可以利用这一特点,实现大小字母的转换

xiaosi@qunar:~/test$ echo "hello world i love you" |tr -t [a-z] [a-z]
hello world i love you
xiaosi@qunar:~/test$ echo "hello world i love you" |tr -t [a-z] [a-z]
hello world i love you

也可以利用字符集合进行转换

xiaosi@qunar:~/test$ echo "hello world i love you" |tr -t [:lower:] [:upper:]
hello world i love you
xiaosi@qunar:~/test$ echo "hello world i love you" |tr -t [:upper:] [:lower:]
hello world i love you

备注:

字符集合如下

\nnn 八进制值的字符 nnn (1 to 3 为八进制值的字符)
\\ 反斜杠
\a ctrl-g 铃声
\b ctrl-h 退格符
\f ctrl-l 走行换页
\n ctrl-j 新行
\r ctrl-m 回车
\t ctrl-i tab键
\v ctrl-x 水平制表符
char1-char2 从char1 到 char2的所有字符按照ascii字符的顺序
[char*] in set2, copies of char until length of set1
[char*repeat] repeat copies of char, repeat octal if starting with 0
[:alnum:] 所有的字母和数字
[:alpha:] 所有字母
[:blank:] 水平制表符,空白等
[:cntrl:] 所有控制字符
[:digit:] 所有的数字
[:graph:] 所有可打印字符,不包括空格
[:lower:] 所有的小写字符
[:print:] 所有可打印字符,包括空格
[:punct:] 所有的标点字符
[:space:] 所有的横向或纵向的空白
[:upper:] 所有大写字母

3.4 字符补集替换

-c:complement,用set2替换set1中没有包含的字符

xiaosi@qunar:~/test$ cat a.txt
monday   09:00
tuesday  09:10
wednesday 10:11
thursday  11:30
friday   08:00
saturday  07:40
sunday   10:00
xiaosi@qunar:~/test$ cat a.txt | tr -c "[a-z][a-z]" "#" | tr -s "#" | tr -t "#" "\n"
monday
tuesday
wednesday
thursday
friday
saturday
sunday

上面代码中 tr -c "[a-z][a-z]" "#" 表示将除大小字母以外的所有的字符都替换为#。

上面代码可优化为:

xiaosi@qunar:~/test$ cat a.txt | tr -cs "[a-z][a-z]" "\n"
monday
tuesday
wednesday
thursday
friday
saturday
sunday

感谢阅读,希望嫩帮助到大家,谢谢大家对本站的支持!