shell基础12:tr
来源:互联网 发布:钢铁侠玩具模型淘宝 编辑:程序博客网 时间:2024/04/28 00:23
关于tr
t r用来从标准输入中通过替换或删除操作进行字符转换。t r主要用于删除文件中控制字符或进行字符转换。使用t r时要转换两个字符串:字符串1用于查询,字符串2用于处理各种转换。
t r刚执行时,字符串1中的字符被映射到字符串2中的字符,然后转换操作开始。
下面讲述:
去除重复出现的字符
下面文件包含了一些打印错误。这种情况时常发生,例如在v i编辑器中,偶尔按住一个键不放。
And the cowwwwws went homeeeeeeeeeeeee
Or did theyyyyyyyyyyyyy
And the cows went home
Or did they
And the cows went home
Or did they
要删除空行,可将之剔出文件。下面是一个文件p l a n e . t x t。文本间有许多空行。
plane.txt
9879932 Spitfire
190992 Lancaster
238991 Typhoon
plane.txt
9879932 Spitfire
190992 Lancaster
238991 Typhoon
plane.txt
9879932 Spitfire
190992 Lancaster
238991 Typhoon
除了删除控制字符,转换大小写是t r最常用的功能。为此需指定即将转换的小写字符[ a - z ]和转换结果[ A - Z ]。
第一个例子,t r从一个包含大小写字母的字符串中接受输入。
MAY DAY,MAY DAY,GOING DOWN..
MAY DAY,MAY DAY,GOING DOWN..
偶尔会从下载文件中删除只包含字母或数字的列。需要结合使用- c和- s选项完成此功能。
下面的文件包含一个星期的日程表。任务是从其中删除所有数字,只保留日期。日期有大写,也有小写格式。因此需指定两个字符范围[ a - z ]和[ A - Z ],命令tr -cs "[a-z][A-Z]""[/012*]"将文件每行所有不包含在[ a - z ]或[ A - Z ](所有希腊字母)的字符串放在字符串1中并转换为一新行。- s选项表明压缩所有新行, - c表明保留所有字母不动。原文件如下,后跟t r命令:
mondy 10:50
Tuesday 15:00
wednesday 15:30
thurday 10:30
Fridya 09:20
mondy
Tuesday
wednesday
thurday
Fridya
t r的第一个功能就是转换控制字符,特别是从d o s向U N I X下载文件时,忘记设置f t p关于回车换行转换的选项时更是如此。
下面是故意没有设置转换开关的一个文本文件,是关于文具需求的一部分内容。使用c a t- v显示控制字符。
Boxes paper 12^M
Clips metal 50^M
Pencils-meduim 10^M
^Z
使用- s选项,查看A S C I I表。^的八进制代码是1 3 6,^ M是0 1 5,t a b键是0 11,^ Z是0 3 2 ,下面将按步骤完成最终功能。
用新行替换每行末尾的^ M,并用/ n去除^ Z,输入要来自于临时工作文件s t a t . t m p。将结果重定向到临时工作文件s t a t . t m p。
[sam@chenwy split]$ cat -v stam.tmp
Boxes paper 12
Clips metal 50
Pencils-meduim 10
如果需要删除文件中^ M,并代之以换行。使用命令:
Boxes paper 12
Clips metal 50
Pencils-meduim 10
^Z
[sam@chenwy split]$ cat stat1.tr
Boxes paper 12
Clips metal 50
Pencils-meduim 10
Boxes paper 12
Clips metal 50
Pencils-meduim 10
要删除所有的t a b键,代之以空格,使用命令:
[sam@chenwy split]$cat -v temp.txt
Boxes paper 12^M
Clips metal 50^M
Pencils-meduim 10^M
^Z
root x 0 0 root /root /bin/bash
bin x 1 1 bin /bin /sbin/nologin
daemon x 2 2 daemon /sbin /sbin/nologin
.....................
可以使用[ c h a r a c t e r * n ]格式匹配多于一个字符。下述文件列出系统硬盘信息,其中包含了系统已经注册的和未识别的。第一列是数字,如果不全是0,表明第二列相应硬盘已经注册。
有时全部为0看起来很烦人,找个吸引人注意力的符号来代替它,以便一眼就能看出哪个硬盘已注册,哪个不可识别。原文件如下:
15566 hdisk3
456554 hdisk2
0000 hdisk1
15566 hdisk3
456554 hdisk2
**** hdisk1
15566 hdisk3
456554 hdisk2
]]]] hdisk1
" 去除控制字符。
" 删除空行。
-d 删除字符串1中所有输入字符。
-s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。
字符范围
使用t r时,可以指定字符串列表或范围作为形成字符串的模式。这看起来很像正则表达式,但实际上不是。指定字符串1或字符串2的内容时,只能使用单字符或字符串范围或列表。
[A-Z] A-Z内的字符组成的字符串。
[0-9] 数字串。
/octal 一个三位的八进制数,对应有效的A S C I I字符。
[O*n] 表示字符O重复出现指定次数n。因此[ O * 2 ]匹配O O的字符串。
大部分t r变种支持字符类和速记控制字符。
字符类格式为[:c l a s s ],包含数字、希腊字母、空行、小写、大写、c n t r l键、空格、点记符、图形等等。
当用一个单字符替换一个字符串或字符范围时,注意字符并不放在方括号里( [ ])。一些系统也可以使用方括号,例如可以写成[“/ 0 1 2”]或“/ 0 1 2”,t r也允许不加引号,因此命令中看到单引号而不是双引号时也不要感到奇怪。
像大多数系统工具一样, t r也受特定字符的影响。因此如果要匹配这些字符,需使用反斜线屏蔽其特殊含义。例如,用/ {指定花括号左边可以屏蔽其特殊含义。
tr中特定控制字符的不同表达方式
/ a Ctrl-G 铃声/ 0 0 7
/ b Ctrl-H 退格符/ 0 1 0
/f Ctrl-L 走行换页/ 0 1 4
/n Ctrl-J 新行/ 0 1 2
/ r Ctrl-M 回车/ 0 1 5
/t Ctrl-I tab键/ 0 11
/ v Ctrl-X / 0 3 0
- shell基础12:tr
- Shell基础之-tr命令
- shell tr
- shell tr
- shell tr
- 【shell】tr
- shell 基础 第二部分 ( cut ,sort, wc,uniq,tee ,tr)
- SHELL TR命令
- [SHELL]:tr 命令详解
- SHELL TR命令
- shell 编程:tr学习
- SHELL TR命令
- shell tr 命令
- TR cmd/shell
- shell tr命令
- Linux Shell 命令--tr
- SHELL TR命令
- shell tr的语法
- JavaScript 一些实用的技巧
- 原创:大数阶乘的讨论(1)
- P2P语音通信和一般VoIP通信质量比较
- ATM系统实现[12]——抽象转户类[00原创]
- shell基础11:文件分类、合并和分割(sort,uniq,join,cut,paste,split)
- shell基础12:tr
- 创建静态页面的方法示例一(2)
- ATM系统实现[13]——业务帐户类[00原创]
- 产生不重复的随机数
- ATM系统实现[14]——可用帐户类[00原创]
- ATM系统实现[15]——身份验证类[00原创]
- 原创:大数阶乘的讨论(2)
- ATM系统实现[16]——交易事务类[00原创]
- ATM系统实现[17]——数据格式验证类[00原创]