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
感谢阅读,希望嫩帮助到大家,谢谢大家对本站的支持!