随笔 - 56, 文章 - 0, 评论 - 0, 引用 - 0
数据加载中……

《LInux与Unix Shell编程指南》笔记之tr命令

                  tr命令
                  点击此处打开本章pdf文档
    作用:主要用于删除文件中控制字符或进行字符转换。
    常用选项的tr命令格式为:
    tr -s -c -d ["string1"] ["string2"] input_file
    解释:
    -c    用string1的字符集的补集替换此string1,要求字符集为ASCII
    -d    删除string中所有输入字符
    -s    删除所有重复出现字符序列,只保留一个,即将重复出现字符串压缩为一个字符串
    input_file是转换文件名。
    使用tr时,可以指定字符串序列或范围作为形成字符串的模式,指定字符串1或字符串2的内容时,只能使用单字符或
字符串范围或列表。
    [a-z]    a-z内的字符组成的字符串
    [A-Z]    A-Z内的字符组成的字符串
    [0-9]    数字串
    /octal    一个三位的八进制数,对应有效的ASCII字符
    [o*n]    表示字符o重复出现指定次数n。如[o*2]匹配oo的字符串。
    当用一个单字符替换一个字符串或字符范围时,注意字符并不放在方括号里([])。一些系统也可以使用方括号,例如可以
写成 ["\012"]或"\012"。tr也允许不加引号,因此命令中看到单引号而不是双引号时也不要感到奇怪。
    像大多数系统工具一样, tr 也受特定字符的影响。因此如果要匹配这些字符,需使用反斜线屏蔽其特殊含义。例如,
用 \{指定花括号左边可以屏蔽其特殊含义。
            tr中特定控制字符的不同表达式
      速记符        含义            八进制方式
         \a         Ctrl
-G铃声            \007
         
\b         Ctrl-H退格符       \010
         \f          Ctrl
-L走行换页   \014
         \n         Ctrl
-J新行            \012
         \r          Ctrl
-M回车          \015
          \t         Ctrl
-I tab键          \011
         \v          Ctrl
-X                  \030
    
    a、去除重复出现的字符
    创建文件oops.txt,内容为:
    [root@localhost ~]# cat oops.txt
    And the cowwwwwws went homeeeeeeee
    Or did theyyyy
    在这里,对象是字符,目的是去重,所以使用-s选项:
    [root@localhost ~]# tr -"[a-z]" < oops.txt
    And the cows went home
    Or did they
    也可以这样,利用管道冲送:
    [root@localhost ~]# cat oops.txt | tr -"[a-z]"
    And the cows went home
    Or did they
    
    b、删除空行
    创建文件plane.txt,内容为:
    [root@localhost ~]# cat plane.txt
    
987932 Spitfire
    
    
    
190992 Lancaster
    
    
238991 Typhoon
    
    其实,上面的内容为:
    987932 Spitfire\n\n\n    190992    Lancaster\n\n    238991 Typhoon\n
    使用-s选项后应为:987932 Spitfire\n    190992    Lancaster\n    238991 Typhoon\n
    换行的八进制为\012,所以:
    [root@localhost ~]# tr -"[\012]" < plane.txt
    
987932 Spitfire
    
190992 Lancaster
    
238991 Typhoon

    c、大写到小写
    大写为[A-Z]或[:upper:],小写为[a-z]或[:lower:],命令为:
    [root@localhost ~]# echo "May Day,May Day,Going Down.." | tr "[A-Z]" "[a-z]"
    may day,may day,going down..
    小写到大写调过来就可以了。
    
    d、删除指定字符
    创建文件diary.txt,内容为:
    [root@localhost ~]# cat diary.txt
    monday 
10:50
    Tuesday 
15:30
    wednesday 
15:39
    thursday 
10:30
    Friday 
09:30
    下面删除不是字母的内容,步骤为先用换行符替代全部非字母的内容,然后删除重复的换行符。其中,替换用-c,删
除重复用-s。命令为:
    [root@localhost ~]# tr -cs "[a-z][A-Z]" "[\012*]" < diary.txt
    monday
    Tuesday
    wednesday
    thursday
    Friday
   
    e、匹配多个字符
    例如,hdisk.txt的内容为:
    [root@localhost ~]# cat hdisk.txt
    
1293    hdisk3
    
4512    hdisk12
    
0000    hdisk5
    
4993    hdisk12
    ]
2994   hdisk7
    命令为:
    [root@localhost ~]# tr "[0*4]" "*" < hdisk.txt
    
1293    hdisk3
    
4512    hdisk12
    
****    hdisk5
    
4993    hdisk12
    ]
2994   hdisk7
 

posted on 2011-02-24 09:53 八路 阅读(1428) 评论(0)  编辑 收藏 引用 所属分类: 嵌入式linux笔记


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理