• shell——tr的用法


    shell——tr的用法

    语法:
              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中的字符。

    引用:[a-z] a-z内的字符组成的字符串。
    [A-Z] A-Z内的字符组成的字符串。
    [0-9] 数字串。

    tr中特定控制字符的不同表达方式

    代码:

    速记符含义八进制方式
      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

    tr(translate缩写)主要用于删除文件中的控制字符,或进行字符转换。
    语法:tr [–c/d/s/t] [SET1] [SET2]
    SET1: 字符集1
    SET2:字符集2
    -c:complement,用SET2替换SET1中没有包含的字符
    -d:delete,删除SET1中所有的字符,不转换
    -s: squeeze-repeats,压缩SET1中重复的字符
    -t: truncate-set1,将SET1用SET2转换,一般缺省为-t
     
    1、去除重复的字符
    #将连续的几个相同字符压缩为一个字符
    $ echo aaacccddd | tr -s [a-z]
    acd
    $ echo aaacccddd | tr -s [abc]
    acddd
     
    2、删除空白行
    #删除空白行就是删除换行符/n
    #注意:这些空白行上只有回车符,没有空格符
    $ cat test.txt
    I love linux!
                                                                                                                              
                                                                                                                              
    Hello World!
                                                                                                                              
    Shell is worthy to been studied
     
    #这里用换行符的转义字符
    #注意:此处用-s删除了多余的换行符,如果用-d,则会删除所有的换行符                                                                                                                          
    $ cat test.txt | tr -s [" "]
    I love linux!
    Hello World!
    Shell is worthy to been studied
    #也可以用八进制符12,12与 都是换行符
    $ cat test.txt | tr -s "[12]"
    I love linux!
    Hello World!
    Shell is worthy to been studied
     
    3、大小写相互转换
    #将语句中所有的小写字母变成大写字母,其中-t可省略
    $ echo "Hello World I Love You" |tr [-t] [a-z] [A-Z]
    HELLO WORLD I LOVE YOU
    #将语句中所有的大写字母变成小写字母
    $ echo "Hello World I Love You" |tr [A-Z] [a-z]
    hello world i love you
    #也可以利用字符类进行转换
    #[:lower:]代表小写字母,[:upper:]代表大写字母
    $ echo "Hello World I Love You" |tr [:lower:] [:upper:]
    HELLO WORLD I LOVE YOU
     
    4、删除指定的字符
    $ cat test.txt
    Monday     09:00
    Tuesday    09:10
    Wednesday  10:11
    Thursday   11:30
    Friday     08:00
    Saturday   07:40
    Sunday     10:00
    #现在要删除处理星期之外的所有字符
    #-d代表删除,[0-9]代表所有的数字,[: ]代表冒号和空格
    $ cat test.txt | tr -d "[0-9][: ]"
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
    Sunday
     
    5、利用-c进行补集的替换
    #有时候在文本中我们只知道要保留的一些字符,其他字符种类繁多,就可以使用补集的替换
    $ cat test.txt
    Monday     09:00
    Tuesday    09:10
    Wednesday  10:11
    Thursday   11:30
    Friday     08:00
    Saturday   07:40
    Sunday     10:00
    #我们只需要星期,则思路就是除了字母,其他统统替换掉
    #这里,-c:用换行符替换掉除了字母外的所有字符;-s:删除多余的换行符
    cat test.txt|tr -cs  "[a-z][A-Z]" " "
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
    Sunday
     
    总结:其中大小写字母的转换,删除不需要的字符比较常用。tr语法简单,易用。

  • 相关阅读:
    开通第一天,以此随笔作为纪念
    Apache 基于IP访问网站
    命令解释
    vi总结
    RAID
    Windows虚拟机安装
    CentOS虚拟机安装
    通过挂载系统光盘搭建本地yum仓库的方法
    VMware workstation 的安装
    Linux下关于vi命令的详细解说
  • 原文地址:https://www.cnblogs.com/hxu7373/p/3506620.html
Copyright © 2020-2023  润新知