[Shell]tr命令详解

1. 用途

tr,translate的简写,主要用于压缩重复字符,删除文件中的控制字符以及进行字符转换操作。

2. 语法
 
  
  1. tr[OPTION]...SET1SET2]
3. 参数
3.1 -s 压缩重复字符

-s: squeeze-repeats,用SET1指定的字符来替换对应的重复字符 (replace each input sequence of a repeated character that islisted in SET1 with a single occurrence of that character

 
    
  1. xiaosi@Qunar:~/test$ echo"aaabbbaacccfddd"|-sabcdf] // abacfd

可以使用这一特点,删除文件中的空白行,实质上跟上面一样,都是用SET1指定的字符来替换对应的重复字符

test$ cat b.txt 
     
  • I like football
  • Footballis very fun!
  • Hello
  • txt["\n"]
  • I like football
  • !
  • Hello
  • 3.2 -d 删除字符

    -d:delete,删除SET1中指定的所有字符,不转换(delete characters in SET1,do not translate)

    "a12HJ13fdaADff"d"[a-z][A-Z]" 
         
  • 1213
  • "a1213fdasf"dadfs]
  • 1213

  • 3.3 字符替换

    -t:truncate,将SET1中字符用SET2对应位置的字符进行替换,一般缺省为-t

     
       
    1. tafd]AFO// A1213FOAsF

    上述代码将a转换为A,f转换为F,d转换为O。

    可以利用这一特点,实现大小字母的转换

    "Hello World I love You"azAZ] 
        
  • HELLO WORLD I lovE YOU
  • "HELLO WORLD I lovE YOU"]
  • hello world i love you
  • 也可以利用字符集合进行转换
    [:lower:]upper:]
  • HELLO WORLD I lovE YOU
  • :]
  • hello world i love you
  • 备注:

    字符集合如下

    \NNN八进制值的字符NNN(1to3为八进制值的字符)
  • \\反斜杠
  • \aCtrlG铃声
  • \bH退格符
  • \fL走行换页
  • \nJ新行
  • \rM回车
  • \tI tab
  • \vX水平制表符
  • CHAR1CHAR2的所有字符按照ASCII字符的顺序
  • CHAR*]in SET2,copies of CHAR until length of SET1
  • *REPEATREPEAT copies of CHARREPEAT octalifstarting with0
  • alnum所有的字母和数字
  • alpha所有字母
  • blank水平制表符,空白等
  • cntrl所有控制字符
  • digit所有的数字
  • graph所有可打印字符,不包括空格
  • 所有的小写字符
  • print所有可打印字符,包括空格
  • punct所有的标点字符
  • space所有的横向或纵向的空白
  • 所有大写字母

  • 3.4 字符补集替换

    -c:complement,用SET2替换SET1中没有包含的字符

    test$ cat atxt
  • Monday09:00
  • Tuesday10
  • Wednesday1011
  • Thursday1130
  • Friday0800
  • Saturday0740
  • Sunday00
  • c"[a-z][A-Z]""#"st"\n"
  • Monday
  • Tuesday
  • Wednesday
  • Thursday
  • Friday
  • Saturday
  • Sunday
  • 上面代码中 tr -c "[a-z][A-Z]" "#" 表示将除大小字母以外的所有的字符都替换为#。

    上面代码可优化为:

    cs"\n"
  • Monday
  • Tuesday
  • Wednesday
  • Thursday
  • Friday
  • Saturday
  • Sunday
  • 相关文章

    用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
    #!/bin/bashcommand1&command2&wait从Shell脚本并行...
    1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
    1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
    BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
    正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...