`
诗意的栖居
  • 浏览: 267226 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

shell tr命令的使用

tr 
阅读更多
tr是translate的简写,亦即翻译,但是遗憾的是,它不能翻译句子,只能翻译单个字符。

1 tr的工作原理是什么?

先记住一点,tr命令不接受指定的文件参数,而只是对标准输入进行翻译。好了,记住这点后,我们继续。

tr的命令格式是tr SET1 SET2,凡是在SET1中的字符,都会被替换为SET2中相应位置上的字符,简单吧!

2 举个例子吧!

tr的例子其实都大同小异,看一个最简单的例子:

我们有一个包含了四个人身高的数据文件,名字叫height.txt,它的内容是这样的:

[rocrocket@rocrocket programming]$ cat height.txt
1.79 1.83
1.65 1.59

我们想搞一个恶作剧,将所有人的身高从1米级别都提高到2米级别,呵呵,一个tr就可以搞定。
[rocrocket@rocrocket programming]$ tr 1 2 < height.txt
2.79 2.83
2.65 2.59

希望你没有忘记,tr只处理标准输入,所以我们需要将height.txt通过重定向指到tr的标准输入才可以。

3 我们可以用tr来修改文件中的间隔符么?

Good idea!

当使用cut的时候,通常会被间隔符问题所困扰,我们这个时候可以考虑到tr这个命令。

还是以height.txt文件为例,其中的间隔符是空格,我们把它修改为制表符吧!

[rocrocket@rocrocket programming]$ tr ‘ ‘ ‘\11′ < height.txt
1.79    1.83
1.65    1.59

这里有一个小知识点,像制表符、换行符这些字符不好表示,我们可以考虑使用ASCII的八进制形式来表示,制表符的八进制形式是11,回车是15,换行是12。而在tr命令中,可以使用\nnn形式表示八进制形式的字符。如果你实在记不住这些编号,那么用\t表示制表符你总该可以记住吧!(\n代表新行,\r代表回车)

这下,你应该可以理解上面那条命令的作用了吧。如果你仍然怀疑,那么,看看下面这条命令,你就该心服口服了:

[rocrocket@rocrocket programming]$ tr ‘ ‘ ‘\11′ < height.txt |sed -n l
1.79\t1.83$
1.65\t1.59$

看!空格的的确确被替换成了制表符喽!

4 使用tr能把文章中的小写都转换成大写么?

这个正是tr所擅长的地方。

加入我们拥有一个文件叫做word.txt,里面包含的内容是AbcdE。

那么最简单的替换大小写的方法是:

[rocrocket@rocrocket programming]$ cat word.txt
AbcdE
[rocrocket@rocrocket programming]$ tr ‘a-z’ ‘A-Z’ < word.txt
ABCDE

5 [CHAR*]怎么用?

这是 SET2 专用的设定,功能是重复指定的字符到与 SET1 相同长度为止

例子:

[rocrocket@rocrocket programming]$ cat number.txt
1234567890
[rocrocket@rocrocket programming]$ tr ‘1-5′ ‘[A*]‘ < number.txt
AAAAA67890

6 [CHAR*REPEAT]怎么用?

这也是SET2专用的设定,功能是将CHAR重复REPEAT次数。其中REPEAT次数可以用八进制数表示,但记得要以0开头表示八进制数。

例子:

[rocrocket@rocrocket programming]$ tr ‘1-9′ ‘[A*5]BCDE’ < number.txt
AAAAABCDE0

7 在tr中还有哪些表示集合的符号呢?

[:alnum:] :所有字母字符与数字
[:alpha:] :所有字母字符
[:blank:] :所有水平空格
[:cntrl:] :所有控制字符
[:digit:] :所有数字
[:graph:] :所有可打印的字符(不包含空格符)
[:lower:] :所有小写字母
[:print:] :所有可打印的字符(包含空格符)
[:punct:] :所有标点字符
[:space:] :所有水平与垂直空格符
[:upper:] :所有大写字母
[:xdigit:] :所有 16 进位制的数字

例子:

将所有的数字都转换为字符x。

[rocrocket@rocrocket programming]$ tr [:alnum:] ‘[x*]‘ < number.txt
xxxxxxxxxx

8 tr里面包含SET1和SET2,那如果出现两个集合的大小不同的情况,tr如何处理呢?

这个问题,最好的解决办法就是做实验啊。

第一种情况是SET1>SET2:

[rocrocket@rocrocket programming]$ tr 1-5 AB < number.txt
ABBBB67890

结论一下子就出来了,SET1中多出来的字符都会和SET2中最后一个字符相对应。

第二种情况SET1<SET2:

[rocrocket@rocrocket programming]$ tr 1-3 ABCDE < number.txt
ABC4567890

很明了,SET2中多余的部分将被抛弃。

9 讲一讲tr命令的-s选项吧!

这个-s选项,是专门针对SET1起作用的,意思是如果发现有连续的SET1里的字符,就把它们缩减为1个。

一个很经典的应用就是把不规律的空格缩减为一个空格:

[rocrocket@rocrocket programming]$ cat spaces.txt
How   are               you?
Fine! Thank    you!
[rocrocket@rocrocket programming]$ tr -s ‘ ‘ ‘ ‘ < spaces.txt
How are you?
Fine! Thank you!

效果很明显,用户很满意。恩!

10 -d选项咋用?

-d选项是用来删除字符用的。格式是这样的:tr -d charset

[rocrocket@rocrocket programming]$ tr -d ‘ ‘ < spaces.txt
Howareyou?
Fine!Thankyou!

看,该有的空格都没了…这就是-d的作用,把空格都删除了!

如果你想把文章中的数字都删除,就tr -d [0-9] < filename就可以了。





语法:
          tr [options]   [source-char-list]        [replace-char-list]      <    filename
用途:
    转换字符,例如:将大写字符转换成小写字符。选项可以让你指定所要删除的字符,以及将一串重复出现的字符浓缩成一个。
常用选项:
-c:   取source-char-list的反义,所有不在source-char-list中的字符。常与-d , -s配合使用。
-d:   删除source-char-list中所定义的字符。
-s:   浓缩重复的字符。如果标准输入中连续重复出现source-char-list里所列的字符,则将其浓缩成一个。或者将其浓缩成replace-char-list中的字符。
tr 'X' 'x' 把所有大写X转换成小写x
tr '()' '{}' 把( )替换成{ }
tr '[a-z]' '[A-Z]' 把所有小写字母变成大写字母
tr '[A-Z]' '[N-ZA-M]' 把字符A-M分别转换成N-Z,而N-Z转换成A-M
tr -s ' ' ' ' 把多个空格转换成单个空格
tr -d '[0-9]' 删除所有数字





引用:[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也受特定字符的影响。因此如果要匹配这些字符,需使用反斜线屏蔽其特殊含义。例如,用\ {指定花括号左边可以屏蔽其特殊含义。


代码:

速记符含义八进制方式

\ 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编辑器中,偶尔按住一个键不放。

代码:
And the cowwwwws went homeeeeeeeeeeeee
Or did theyyyyyyyyyyyyy



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



删除空行
要删除空行,可将之剔出文件。下面是一个文件p l a n e . t x t。文本间有许多空行。



plane.txt
9879932 Spitfire




190992 Lancaster




238991 Typhoon



dtdlut@dtdlut:~$ tr -s "\n" < plane.txt
plane.txt
9879932 Spitfire
190992 Lancaster
238991 Typhoon


大写到小写
除了删除控制字符,转换大小写是t r最常用的功能。为此需指定即将转换的小写字符[ a - z ]和转换结果[ A - Z ]。
第一个例子,t r从一个包含大小写字母的字符串中接受输入。

tr "[a-z]" "[A-Z]"      或者          tr "[:lower:]" "[:upper:]"
dtdlut@dtdlut:~$ echo "May Day,May Day,Going Down.." | tr "[a-z]" "[A-Z]"
MAY DAY,MAY DAY,GOING DOWN..


删除指定字符
偶尔会从下载文件中删除只包含字母或数字的列。需要结合使用- c和- s选项完成此功能。
下 面的文件包含一个星期的日程表。任务是从其中删除所有数字,只保留日期。日期有大写,也有小写格式。因此需指定两个字符范围[ a - z ]和[ A - Z ],命令tr    -cs         "[a-z][A-Z]"          "\n"将文件每行所有不包含在[ a - z ]或[ A - Z ](所有希腊字母)的字符串放在字符串replace-char-list中并转换为一新行。- s选项表明压缩所有新行, - c表明取source-char-list的反义。
dtdlut@dtdlut:~$ cat diray.txt
mondy 1all0:5b0
Tuesday 15:00
wednesday 15:30
thurday 10:30
Fridya 09:20


dtdlut@dtdlut:~$ tr -cs "[a-z][A-Z]" "\n" < diray.txt
mondy
all
b
Tuesday
wednesday
thurday
Fridya

分享到:
评论

相关推荐

    linux shell命令tr的用法

    linux shell命令tr的用法

    Linux shell tr 命令详解

    主要介绍了Linux shell tr 命令详解的相关资料,需要的朋友可以参考下

    UNIX命令及SHELL编程

    02_Shell-使用find和xargs.PDF 03_Shell-后台执行命令.PDF 04_Shell-文件名置换.PDF 05_Shell-shell输入与输出.PDF 06_Shell-命令执行顺序.PDF 07_文本过滤-正则表达式介绍.PDF 08_文本过滤-grep 家族.PDF 09...

    shell命令精品教程

    2、使用find和xargs 3、后台执行命令 4、文件名置换 5、shell输入与输出 6、命令执行顺序 7、文本过滤 8、grep 家族 9、AWK 介绍 10、sed 用法介绍 11、合并与...

    Linux命令学习 shell pdf格式

    第二十四章 shell嵌入命令 第五部分 高级shell编程技巧 第二十五章 深入讨论 第二十六章 shell工具 第二十七章 几个脚本例子 第二十八章 运行级别脚本 附录 常用shell命令 另外附有Linux命令说明(doc版,32页)

    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命令选项 ...

    Linux tr命令的使用

    tr用来转换或者删除一段文字。tr是translate(转换的缩写),功能的英文示意是:translate or delete characters。tr所有的功能均可由sed来完成,可以将tr视为sed一个极简的实现。 2.格式 tr [OPTION]... SET1 [SET...

    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

    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自学pdf.zip

    经曲的SHELL自学PDF书籍。 第01章文件安全与权限.PDF 第02 章使用find 和xargs.PDF 第03 章后台执行命令.PDF 第04 章文件名置换.PDF 第05 章shell 输入与输出.PDF 第06 章命令执行顺序.PDF ...附录常用shell 命令.PDF

    shell编程 linux

    001文件安全与权限.pdf 002使用find和xargs.pdf 003后台执行命令.pdf 004文件名置换.pdf 005shell输入与输出.pdf 006命令执行顺序.pdf 007正则表达式介绍.pdf 008grep 家族.pdf ... 常用shell命令030.pdf

    LINUX and SHELL 自学总结

    5. #DD命令使用总结 8 6. #REV 字符串反向命令 8 7. 变量截取 8 8. #UNIQ 去掉重复 8 9. #SORT 排序 8 10. 杀掉某进程 8 11. #SHELL输出TAB和空格 8 12. #PS用法 8 13. #TAIL用法 9 14. #ECHO选项 9 15. #GREP和...

    LINUX与UNIX SHELL编程指南(很全)

    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命令选项 ...

    Linux与UNIX Shell编程指南.rar

    本书共分五部分 ,详细介绍了SHELL编程技巧,各种UNIX命令及语法,还涉及了UNIX的文字处理以及少量的系统管理问题。本书内容全面,文字简洁流畅,适合SHELL编程人员学习、参考。 目录 第一部分 SHELL 第一章 文件...

    Linux中Shell截取某行某列信息

    背景:执行shell命令,抓取shell返回信息中的所需信息,已udhcpc为例获取DNS的地址。 暂不作处理,执行udhcpc。 使用grep过滤掉无用信息,执行 udhcpc | grep “DNS” 使用sed抓取第二行,-n ‘2p’代表第二行,-n...

    shell入门经典资料

    bash shell 的內建命令 echo cd pwd alias 命令列程式 date who ls cat wc ln basename dirname sort uniq cut paste tr grep 練習用的資料檔 常用的特殊字元 一個命令列執行好幾個命令 命令列郵寄帶檔的方法 本節習...

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

    本书共分五部分 ,详细介绍了SHELL编程技巧,各种UNIX命令及语法,还涉及了UNIX的文字处理以及少量的系统管理问题。本书内容全面,文字简洁流畅,适合SHELL编程人员学习、参考。 目录 第一部分 SHELL 第一章 文件...

    Linux Shell编程3/3

    Linux Shell编程经典著作: 第一部分SHELL |_文件安全与权限 |_使用find和xargs |_后台执行命令 |_文件名置换 |_shell输入与输出 |_命令执行顺序 第二部分文本过滤 |_正则表达式介绍 ...

Global site tag (gtag.js) - Google Analytics