tr命令

本文涉及的产品
转发路由器TR,750小时连接 100GB跨地域
简介:

 [正文开始]

 
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就可以了。









本文转自 linuxtro 51CTO博客,原文链接:http://blog.51cto.com/linuxtro/986278,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
数据采集 Shell Linux
【Shell 命令集合 文档编辑】Linux 字符转换或删除 tr 命令使用指南
【Shell 命令集合 文档编辑】Linux 字符转换或删除 tr 命令使用指南
102 0
|
Shell Linux
Linux中常用的文本处理命令(echo、sort、uniq、tr、cut、split、eval)(上)
1、echo命令——输出 echo 命令主要用来显示字符串信息。
371 0
常用文本内容命令(tr cut sort uniq)
常用文本内容命令(tr cut sort uniq)
|
6月前
|
Linux Perl
Linux命令之tr
Linux命令之tr
61 2
|
6月前
|
Linux
Linux命令(79)之tr
Linux命令(79)之tr
284 1
|
Linux Windows
一秒学会文件内容浏览,cut命令使用,uniq命令使用,sort命令,tr
一、文件内容浏览 a.cat查看/etc/passwd文件内容,且输出时带行号
249 0
|
Linux
10.6.4 【Linux】字符转换命令: tr, col, join, paste, expand
10.6.4 【Linux】字符转换命令: tr, col, join, paste, expand
234 0
使用tr命令和sort命令对数组重新排序
方法一: 步骤: 使用tr命令将数组内每个元素之间的空格替换为换行符; 之后使用sort命令按从小到大重新排序; 最后使用for循环遍历排序后的元素值。通过下标值重新定义数组中的每个元素。
411 0
|
Linux Shell
Linux中常用的文本处理命令(echo、sort、uniq、tr、cut、split、eval)(下)
1、echo命令——输出 echo 命令主要用来显示字符串信息。
251 0
|
SQL 分布式计算 Hadoop
【Linux】Linux 管道命令Cut、sort、wc、uniq、tee、tr【一】
【Linux】Linux 管道命令Cut、sort、wc、uniq、tee、tr【一】
497 0
【Linux】Linux 管道命令Cut、sort、wc、uniq、tee、tr【一】