`
izuoyan
  • 浏览: 8881318 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

shell命令_tr基础

 
阅读更多

关于tr

去除^M部分还需要验证......
t r用来从标准输入中通过替换或删除操作进行字符转换。t r主要用于删除文件中控制字符或进行字符转换。使用t r时要转换两个字符串:字符串1用于查询,字符串2用于处理各种转换。
t r刚执行时,字符串1中的字符被映射到字符串2中的字符,然后转换操作开始
下面讲述:
引用:
? 大小写转换。
? 去除控制字符。
? 删除空行。


带有最常用选项的t r命令格式为:
代码:
t r - c - d - s [ " s t r i n g 1 _ t o _ t r a n s l a t e _ f r o m " ] [ " s t r i n g 2 _ t o _ t r a n s l a t e _ t o " ] i n p u t _f i l e


这里:
引用:
-c 用字符串1中字符集的补集替换此字符集,要求字符集为A S C I I。
-d 删除字符串1中所有输入字符。
-s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。

I n p u t - f i l e是转换文件名。虽然可以使用其他格式输入,但这种格式最常用。

字符范围
使用t r时,可以指定字符串列表或范围作为形成字符串的模式。这看起来很像正则表达式,但实际上不是。指定字符串1或字符串2的内容时,只能使用单字符或字符串范围或列表。
引用:
[a-z] a-z内的字符组成的字符串。
[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

去除重复出现的字符
下面文件包含了一些打印错误。这种情况时常发生,例如在v i编辑器中,偶尔按住一个键不放。
代码:
[sam@chenwy split]$ cat opps.txt
And the cowwwwws went homeeeeeeeeeeeee
Or did theyyyyyyyyyyyyy


如果要去除重复字母或将其压缩在一起,使用- s选项。因为都是字母,故使用[ a - z ]。输入文件重定向到t r命令。
代码:
[sam@chenwy split]$ tr -s "[a-z]" < opps.txt
And the cows went home
Or did they


所有重复字符被压缩成一个。如果使用c a t命令,再将结果管道输出至t r,结果是一样的。
代码:
[sam@chenwy split]$ cat opps.txt | tr -s "[a-z]"
And the cows went home
Or did they


删除空行
要删除空行,可将之剔出文件。下面是一个文件p l a n e . t x t。文本间有许多空行。
代码:
[sam@chenwy split]$ cat plane.txt
plane.txt
9879932 Spitfire


190992 Lancaster


238991 Typhoon


使用- s来做这项工作。换行的八进制表示为/ 0 1 2,命令为:
代码:
[sam@chenwy split]$ tr -s "[/012]" < plane.txt
plane.txt
9879932 Spitfire
190992 Lancaster
238991 Typhoon


也可以使用换行速记方式/ n。
代码:
[sam@chenwy split]$ tr -s "[/n]" < plane.txt
plane.txt
9879932 Spitfire
190992 Lancaster
238991 Typhoon


大写到小写
除了删除控制字符,转换大小写是t r最常用的功能。为此需指定即将转换的小写字符[ a - z ]和转换结果[ A - Z ]。
第一个例子,t r从一个包含大小写字母的字符串中接受输入。
代码:
[sam@chenwy split]$ echo "May Day,May Day,Going Down.." | tr "[a-z]" "[A-Z]"
MAY DAY,MAY DAY,GOING DOWN..


同样,也可以使用字符类[:l o w e r:]和[:u p p e r:]。
代码:
[sam@chenwy split]$ echo "May Day,May Day,Going Down.." | tr "[:lower:]" "[:upper:]"
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命令:
代码:
[sam@chenwy split]$ cat diary.txt
mondy 10:50
Tuesday 15:00
wednesday 15:30
thurday 10:30
Fridya 09:20


代码:
[sam@chenwy split]$ tr -cs "[a-z][A-Z]" "[/012*]" <diary.txt
mondy
Tuesday
wednesday
thurday
Fridya


转换控制字符
t r的第一个功能就是转换控制字符,特别是从d o s向U N I X下载文件时,忘记设置f t p关于回车换行转换的选项时更是如此。
下面是故意没有设置转换开关的一个文本文件,是关于文具需求的一部分内容。使用c a t- v显示控制字符。
代码:
[sam@chenwy split]$ cat -v stat.tr
Boxes paper 12^M
Clips metal 50^M
Pencils-meduim 10^M
^Z


猜想‘中间空的是’是t a b键。每一行以C t r l - M结尾,文件结尾C t r l - 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]$ tr -s "[/015][/032]" "/n" <stat.tr >stam.tmp
[sam@chenwy split]$ cat -v stam.tmp
Boxes paper 12
Clips metal 50
Pencils-meduim 10


快速转换
如果需要删除文件中^ M,并代之以换行。使用命令:
代码:
[sam@chenwy split]$ tr -s "[/015]" "/n" < stat.tr |cat -v
Boxes paper 12
Clips metal 50
Pencils-meduim 10
^Z


或者用下述命令得同样结果。
代码:
[sam@chenwy split]$ tr -s "[/032]" "/n" < stat.tr >stat1.tr
[sam@chenwy split]$ cat stat1.tr
Boxes paper 12
Clips metal 50
Pencils-meduim 10


也可以用下述命令:
代码:
[sam@chenwy split]$ tr -s "[/r]" "/n" < stat.tr


代码:
[sam@chenwy split]$ tr -s "/r" "/n" < stat.tr

要删除所有的t a b键,代之以空格,使用命令:
代码:
[sam@chenwy split]$ tr -s "[1]" "[0*]" < stat.tr >temp.txt
[sam@chenwy split]$cat -v temp.txt
Boxes paper 12^M
Clips metal 50^M
Pencils-meduim 10^M
^Z


替换p a s s w d文件中所有冒号,代之以t a b键,可以增加可读性。将冒号引起来,指定替换字符串中t a b键八进制值0 11,下面是p a s s w d文件,后跟t r命令结果:
代码:
[sam@chenwy split]$ tr -s "[:]" "[/t]" < passwd
root x 0 0 root /root /bin/bash
bin x 1 1 bin /bin /sbin/nologin
daemon x 2 2 daemon /sbin /sbin/nologin
.....................



代码:
[sam@chenwy split]$ tr -s "[:]" "[1]" < passwd


匹配多于一个字符
可以使用[ c h a r a c t e r * n ]格式匹配多于一个字符。下述文件列出系统硬盘信息,其中包含了系统已经注册的和未识别的。第一列是数字,如果不全是0,表明第二列相应硬盘已经注册。
有时全部为0看起来很烦人,找个吸引人注意力的符号来代替它,以便一眼就能看出哪个硬盘已注册,哪个不可识别。原文件如下:
代码:
[sam@chenwy split]$ cat hdisk.txt
15566 hdisk3
456554 hdisk2
0000 hdisk1


从文件列表中知道,有一个硬盘未注册,因此用星号代替所有的0。模式为[ 0 * 4 ],意即匹配至少4个0,替换字符串为星号,过滤命令及结果如下:
代码:
[sam@chenwy split]$ tr "[0*4]" "*" < hdisk.txt
15566 hdisk3
456554 hdisk2
**** hdisk1


但我发现加上[]后结果不对了
代码:
[sam@chenwy split]$ tr "[0*4]" "[*]" < hdisk.txt
15566 hdisk3
456554 hdisk2
]]]] hdisk1

分享到:
评论

相关推荐

    UNIX命令及SHELL编程

    这是一套完整的Unix培训教材,包括Unix常用命令及SHELL编程基础与高级技巧,PDF格式,共30个文件。另有2个Word文档。包内文件清单如下: 01_Shell-文件安全与...30_附录常用shell命令.PDF awk教程.doc shell教程.doc

    Linux shell脚本 精华中文版

    001_文件和目录的权限_setuid_chown_chgrp_umask_符号链接.pdf 002_使用find和xargs.pdf 003_后台执行命令_crontab_at.pdf 004_文件名置换_匹配文件名中的字符.pdf ... 030_附录_常用Shell命令.pdf

    shell 编程(中文)[pdf]

    001_文件和目录的权限_setuid_chown_chgrp_umask_符号链接.pdf 002_使用find和xargs.pdf 003_后台执行命令_crontab_at.pdf 004_文件名置换_匹配文件名中的字符.pdf 005_echo_read_cat_...030_附录_常用Shell命令.pdf

    shell命令精品教程

    基础s h e l l编程 16、shell脚本介绍 17、条件测试 18、控制流结构 19、shell 函数 20、向脚本传递参数 21、创建屏幕输出 22、创建屏幕输入 23、调试脚本 24、...

    Linux Shell编程3/3

    Linux Shell编程经典著作: 第一部分SHELL |_文件安全与权限 |_..._…… 第五部分高级shell编程技巧 |_深入讨论|_shell工具 |_几个脚本例子 |_运行级别脚本 |_cgi脚本 附录常用shell命令

    Linux Shell编程1/3

    Linux Shell编程经典著作: 第一部分SHELL |_文件安全与权限 |_..._…… 第五部分高级shell编程技巧 |_深入讨论|_shell工具 |_几个脚本例子 |_运行级别脚本 |_cgi脚本 附录常用shell命令

    Linux Shell编程2/3

    Linux Shell编程经典著作: 第一部分SHELL |_文件安全与权限 |_..._…… 第五部分高级shell编程技巧 |_深入讨论|_shell工具 |_几个脚本例子 |_运行级别脚本 |_cgi脚本 附录常用shell命令

    Linux命令学习 shell pdf格式

    第一部分 shell 第一章 文件安全与权限 第二章 使用find和xargs 第三章 后台执行命令 第四章 文件名置换 第五章 shell输入与输出 第六章 命令执行顺序 ...附录 常用shell命令 另外附有Linux命令说明(doc版,32页)

    shell编程指南,shell脚本,本书共分五部分全。grep家族,sed,AWK,正则表达式,tr用法

    Linux与unix shell编程指南.rar 第一部分 shell 第1章 文件安全与权限 1 第2章 使用find和xargs 14 第3章 后台执行命令 22 第4章 文件名置换 31 第5章 shell输入与输出 34 ...附录 常用shell命令 350

    Unix shell 基础知识普及

    1. 文件安全与权限 2. find 和 xargs 3. 后台执行命令 4. 文件名置换 5. SHELL 输入与输出 6. 命令执行顺序 7. 正则表达式介绍 文本过滤 8. GREP 家族 9. AWK 介绍 10. sed 用法介绍 ...30. 常用 SHELL 命令

    shell编程和unix命令

    2.1.13 使用exec或ok来执行shell命令 19 2.1.14 find命令的例子 20 2.2 xargs 20 2.3 小结 21 第3章 后台执行命令 22 3.1 cron和crontab 22 3.1.1 crontab的域 22 3.1.2 crontab条目举例 23 3.1.3 crontab命令选项 ...

    shell 编程指南pdf

    2.1.13 使用exec或ok来执行shell命令 19 2.1.14 find命令的例子 20 2.2 xargs 20 2.3 小结 21 第3章 后台执行命令 22 3.1 cron和crontab 22 3.1.1 crontab的域 22 3.1.2 crontab条目举例 23 3.1.3 crontab命令选项 ...

    shell中常用的基础命令

    文章目录前言diff (对比不同)vimdiff用法diff用法patch(只更改要变化的部分)cut(截取数据)sort(排序)uniq(重复检测)tr(转换字符的大小写)testtest命令test数字对比test的条件关系test对空的判定test对于...

    绝版高清经典Linux与UNIX_Shell编程指南中文版

    shell 文件安全与权限 使用find 和xargs 后台执行命令 文件名置换 shell输入与输出 命令执行顺序 文本过滤正则表达式介绍 grep 家族 awk 介绍 sed用法介绍 ... tr用法 ... 基础shell编程 ... 常用shell命令

    LINUX与UNIX_Shell编程指南

    第1章文件安全与权限 第一部分s h e l l ? 文件和目录的权限。 ? setuid。 ? chown和c h g r p。 ? umask。 ? 符号链接。 第2章使用find和xargs ...第12章tr 用法 ...第四部分基础s h e l l编程 ...附录常用shell命令

    绝版经典 LINUX与UNIX SHELL编程指南 PDF 高清版 [16.3M]

    第四部分 基础SHELL编程 第十六章 SHELL脚本介绍 第十七章 条件测试 第十八章 控制流结构 第十九章 SHELL函数 第二十章 向脚本传递参数 第二一章 创建屏幕输出 第二二章 创建屏幕输入 第二三章 调试脚本 第...

    Linux Shell 编程 入门、提高、精通

    第一部分 shell 第1章文件安全与权限 第2章使用find和xargs 第3章后台执行命令 第4章文件名置换 第5章shell输入与输出 第6章命令执行顺序 第二部分文本过滤 第7章正则表达式介绍 ...附录常用shell命令

    Linux与unix shell编程指南.rar

    shell,shell脚本,本书共分五部分全。grep家族,sed,AWK,正则表达式,tr用法 第一部分 shell 第1章 文件安全与权限 1 第2章 使用find和xargs 14 第3章 后台执行命令 22 第4章 文件名置换 31 ...附录 常用shell命令 350

Global site tag (gtag.js) - Google Analytics