zoukankan      html  css  js  c++  java
  • 命令:tr

    参考资料:https://www.thegeekstuff.com/2012/12/linux-tr-command/

    简介

    tr命令用于转换、删除或者去除重复字符。它从STDIN中读取数据并且将其写入SDTOUT。
    因此它的用法是这样的。从用户键入的STDIN中读取。

    [root@C7 ~]# tr abc ABC
    abcdefg
    ABCdefg
    aabbcc
    AABBCC
    def    
    def
    

    或者这样的。通过输入重定向来读取文件的数据。

    [root@C7 ~]# cat tr.txt 
    abcdefg
    aabbcc
    def    
    [root@C7 ~]# tr abc ABC < tr.txt 
    ABCdefg
    AABBCC
    def
    

    因为是写入到STDOUT,因此不会修改作为STDIN的文件的内容。
    它不支持直接将文件作为命令的参数传入。

    [root@C7 ~]# tr abc ABC tr.txt 
    tr: extra operand ‘tr.txt’
    Try 'tr --help' for more information.
    

    语法格式

    tr [OPTION]... SET1 [SET2]
    

    转换

    如果SET1和SET2都指定了并且没有-d选项。那么tr就会将SET1中的每个字符按照位置一一替换为SET2中对应的每个字符。

    1. 大小写转换

    [root@C7 ~]# tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
    zhangwenlong
    ZHANGWENLONG
    [root@C7 ~]# tr [:lower:] [:upper:]
    zhangwenlong
    ZHANGWENLONG
    [root@C7 ~]# tr a-z A-Z
    zhangwenlong
    ZHANGWENLONG
    

    2. 括号转换

    括号这类符号也可以进行转换,不过要注意的是需要使用引号包裹。

    [root@C7 ~]# cat tr.txt
    {zhang} {wen} {long}
    [root@C7 ~]# tr {} () < tr.txt
    -bash: syntax error near unexpected token `('
    [root@C7 ~]# tr '{}' '()' < tr.txt
    (zhang) (wen) (long)
    [root@C7 ~]# tr "{}" "()" < tr.txt
    (zhang) (wen) (long)
    

    默认情况下,是将转换后的结果写到STDOUT,可以通过输出重定向至文件。
    注意:这不会改变原文件。

    [root@C7 ~]# cat tr.txt
    {zhang} {wen} {long}
    [root@C7 ~]# tr '{}' '()' < tr.txt > tr_new.txt
    [root@C7 ~]# cat tr.txt 
    {zhang} {wen} {long}
    [root@C7 ~]# cat tr_new.txt 
    (zhang) (wen) (long)
    

    如果STDIN和STDOUT的文件是同一个的话,也无法达到像我们预期的那样修改文件的效果。
    反而会清空文件!!!

    [root@C7 ~]# cat tr.txt 
    {zhang} {wen} {long}
    [root@C7 ~]# tr '{}' '()' < tr.txt > tr.txt 
    [root@C7 ~]# cat tr.txt
    [root@C7 ~]# wc -l tr.txt
    0 tr.txt
    

    3. 空格转换制表符

    注意,不仅仅是空格被转换,末尾的换行符也被转换了。

    [root@C7 ~]# echo "This is for testing" | tr [:space:] '	'
    This	is	for	testing	[root@C7 ~]# 
    

    通过这个例子比较直观可以显示了。

    [root@C7 ~]# echo "This is for testing" | tr [:space:] 'L'
    ThisLisLforLtestingL[root@C7 ~]#
    

    4. 使用-s选项来压缩重复的字符

    案例3中,如果空格的数量大于一个,那么我们在转换的时候,就会针对每一个连续且重复的空格都进行转换为制表符的操作,如下所示。

    [root@C7 ~]# echo "This is for testing" | tr [:space:] '	'
    This	is	for	testing	[root@C7 ~]# 
    [root@C7 ~]# echo "This  is  for  testing" | tr [:space:] '	'
    This		is		for		testing	[root@C7 ~]#
    

    通过-s选项,就会将连续且重复的字符,仅识别为单个字符,然后进行转换。

    [root@C7 ~]# echo "This is for testing" | tr [:space:] '	'
    This	is	for	testing	[root@C7 ~]# 
    [root@C7 ~]# echo "This  is  for  testing" | tr -s [:space:] '	'
    This	is	for	testing	[root@C7 ~]#
    

    同样的,可以将多个连续的空格转换为单个空格字符。

    [root@C7 ~]# echo "This    is    for    testing" | tr -s [:space:] ' '
    This is for testing 
    

    5. 使用-d选项删除特定的字符

    因为是删除,所以在语法格式中,只需要SET1,不需要SET2。

    [root@C7 ~]# echo "the geek stuff" | tr -d t
    he geek suff
    [root@C7 ~]# echo "my number is 89757" | tr -d [:digit:]
    my number is
    

    如果想要删除文件中符合条件的行的话,那么需要使用sed命令

    6. 使用-c选项来获取集合的补集

    因为是数字的补集,所以末尾的换行符也被删除了。

    [root@C7 ~]# echo "my number is 89757" | tr -cd [:digit:]
    89757[root@C7 ~]#
    

    7. 删除不可打印字符

    第五行是三个空格,第六行是三个制表符。从结果来看,不可打印的字符应该是换行符和制表符。

    [root@C7 ~]# cat tr.txt
    zhangwenlong
    ZHANGWENLONG
    123456
    !@#$%^
       
    			
    [root@C7 ~]# tr -dc [:print:] < tr.txt 
    zhangwenlongZHANGWENLONG123456!@#$%^   [root@C7 ~]#
    

    8.将文件中的所有行合并为一行

    [root@C7 ~]# cat tr.txt
    zhangwenlong
    ZHANGWENLONG
    123456
    !@#$%^
       
    			
    [root@C7 ~]# tr -s '
    ' ' ' < tr.txt 
    zhangwenlong ZHANGWENLONG 123456 !@#$%^ 			 [root@C7 ~]#
    
  • 相关阅读:
    解决U3D4.1.5或以上无法启动MONODEV的方法
    unity的List构造函数在IOS平台存在缺陷
    【Python爬虫】性能提升
    【JavaScript+jQuery】JavaScript权威指南读书笔记1
    【Python爬虫】爬虫的基本修养
    【Python基础】Python yield 用法
    【Python进阶】回调函数
    【Python基础】Python输出终端的颜色显示
    【python进阶】并发编程-线程进程协程
    【项目实战开发】密码加密处理后登录验证
  • 原文地址:https://www.cnblogs.com/alongdidi/p/linux_command_tr.html
Copyright © 2011-2022 走看看