zoukankan      html  css  js  c++  java
  • 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命令中,可以使用 nn形式表示八进制形式的字符。如果你实在记不住这些编号,那么用 表示制表符你总该可以记住吧! ( 代表新行, 代表回车)

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

    [rocrocket@rocrocket programming]$ tr ‘ ‘ ‘11′ < height.txt |sed -n l
    1.79 1.83$
    1.65 1.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
    Ctrl-J 新行 0 1 2
    r Ctrl-M 回车 0 1 5
    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 " " < 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]"          " "将文件每行所有不包含在[ 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]" " " < diray.txt
    mondy
    all
    b
    Tuesday
    wednesday
    thurday
    Fridya

  • 相关阅读:
    代码优化:尽量减少对变量的重复计算
    Easy code数据库类型NUMBER(20),没有找到映射关系
    Apache JMeter的下载和安装
    启动报错:Error Running cant find catalina.jar
    创建自定义配置节
    Word转Chm 在线转换应用
    silverlight概述
    布局
    case of silverlight
    关于SilverLight打印(二)
  • 原文地址:https://www.cnblogs.com/qionghua520/p/4369900.html
Copyright © 2011-2022 走看看