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

tr用法

程序员文章站 2024-02-24 11:11:16
...
tr用来从标准输入中通过替换或删除操作进行字符转换。

tr主要用于删除文件中控制字符或进行字符转换。使用t r时要转换两个字符串:字符串1用于查询,字符串2用于处理各种转换。tr刚执行时,字符串1中的字符被映射到字符串2中的字符,然后转换操作开始。


带有最常用选项的t r命令格式为:
tr-c-d-s["string1_to_translate_from"]["string2_to_translate_to"]  input_
file
这里:
[list]
[*]-c 用字符串1中字符集的补集替换此字符集,要求字符集为 ASCII。
[*]-d 删除字符串1中所有输入字符。
[*]-s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符
[/list]


去除重复的字
-bash-3.00$ cat oops.txt
And the cowwwwwwws went homeeeeeeeeeeeeeeeeeeeeeeeee
or did theyyyyyyyyyyyyyyyyyyyy


-bash-3.00$ tr -s "[a-z]" <oops.txt
And the cows went home
or did they


去除空格行
-bash-3.00$ cat plane.txt
123 shihai

567 yangshihai


8910 I love you


12356 iuiuweirui


-bash-3.00$ tr -s "[\012]" <plane.txt
123 shihai
567 yangshihai
8910 I love you
12356 iuiuweirui

-bash-3.00$ tr -s ["\n"] < plane.txt
123 shihai
567 yangshihai
8910 I love you
12356 iuiuweirui


小写改大写
-bash-3.00$ echo "May DAY,May ADY,COING down.." | tr "[a-z]" "[A-Z]"
MAY DAY,MAY ADY,COING DOWN..

大写改小写
-bash-3.00$ echo "May DAY,May ADY,COING down.." | tr "[A-Z]" "[a-z]"
may day,may ady,coing down..
-bash-3.00$ echo "May DAY,May ADY,COING down.." | tr "[:upper:]" "[:lower:]"
may day,may ady,coing down..



转换控制字符
tr的第一个功能就是转换控制字符,特别是从 dos向UNIX下载文件时,忘记设置ftp关于回车换行转换的选项时更是如此。下面是故意没有设置转换开关的一个文本文件,是关于文具需求的一部分内容。
使用 cat- v显示控制字符。
-bash-3.00$ cat -v plane.txt
123 shihai

567 yangshihai


8910 I love you


12356 iuiuweirui
^[
-bash-3.00$ tr -s "[\136]" "[\01*]" <plane.txt > stat.tmp
-bash-3.00$ cat stat.tmp
123 shihai

567 yangshihai


8910 I love you


12356 iuiuweirui

[b]快速转换[/b]
-bash-3.00$ cat diary.txt
monday 10:50
tuesday 15:30
wednesday 15:30
thurday 10:30
Friday 09.20
-bash-3.00$ tr "[:]" "[\t]" <diary.txt
monday 10 50
tuesday 15 30
wednesday 15 30
thurday 10 30
Friday 09.20



[b]匹配多于一个字符[/b]
可以使用[character*n ]格式匹配多于一个字符。下述文件列出系统硬盘信息,其中包含了系统已经注册的和未识别的。第一列是数字,如果不全是 0,表明第二列相应硬盘已经注册。有时全部为0看起来很烦人,找个吸引人注意力的符号来代替它,以便一眼就能看出哪个硬盘已注册,哪个不可识别。原文件如下:
/home/l/g/tomotoboy >tr "['0'*4]" "*" < hdisk.txt
1293 hdisk3
4512 hdisk12
0000 hdisk5
4993 hdisk12
2994 hdisk7
0000 hdisk9

不知道怎么回事结果不是我想要的,纳闷中…… :(
相关标签: Bash C C++ C#

上一篇: 什么是连接池

下一篇: