zoukankan      html  css  js  c++  java
  • Linux命令学习手册-tr命令 2015-07-26 20:35 9人阅读 评论(0) 收藏

    tr [OPTION]... SET1 [SET2] 


    [功能] 

    转换或者删除字符。 


    [描述] 

    tr指令从标准输入设备读取数据,经过字符串转译后,输出到标准输出设备。 

    通过使用 tr,您可以非常容易地实现 sed 的许多最基本功能。您可以将 tr 看作为 sed 的(极其)简化的变体:它可以用一个字符来替换另一个字符,或者可以完全除去一些字符。您也可以用它来除去重复字符。这就是所有 tr 所能够做的。 

    tr用来从标准输入中通过替换或删除操作进行字符转换。tr主要用于删除文件中控制字符或进行字符转换。使用tr时要转换两个字符串:字符串1用于查询,字符串2用于处理各种转换。tr刚执行时,字符串1中的字符被映射到字符串2中的字符,然后转换操作开始。 

    参数: 

      -c或--complerment   取代所有不属于第一字符集的字符。 

      -d或--delete   删除所有属于第一字符集的字符。 

      -s或--squeeze-repeats   把连续重复的字符以单独一个字符表示。 

      -t或--truncate-set1   这个比较难理解,man上面的解释是:first truncate SET1 to length of SET2,经过我的实践发现,将set1的字符依次替换成set2中的字符,如果set1中的字符数目超过set2,那么set1多出的字符忽略。如果没有-t,那么多出的字符都替换成set2的最后一个字符。 

      --help   在线帮助。 

      --version   显示版本信息。 


    字符范围 

    指定字符串1或字符串2的内容时,只能使用单字符或字符串范围或列表。 

    [a-z] a-z内的字符组成的字符串。 

    [A-Z] A-Z内的字符组成的字符串。 

    [0-9] 数字串。 

    octal 一个三位的八进制数,对应有效的ASCII字符。 

    [O*n] 表示字符O重复出现指定次数n。因此[O*2]匹配OO的字符串。 

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

    速记符含义八进制方式 

    a Ctrl-G  铃声07 

     Ctrl-H  退格符10 

    f Ctrl-L  走行换页14 

    Ctrl-J  新行12 

    Ctrl-M  回车15 

    Ctrl-I  tab键11 

    v Ctrl-X  30 


    [举例] 

    *压缩文件test内容中重复的字符为一个: 

    $tr -s [a-z]<test < font="" style="word-wrap: break-word;">

    这样,会把文件中每一行的,Set1([a-z])字符串中的重复字符压缩为一个,并把处理的结果打印到标准输出,原来的文件不变。 

    注意这里,set1集合(也就是第一个参数[a-z])中指定的是字符集合,而不是字符串,所以这里做的是把单个字符的重复给压缩为一个,而不是字符串的重复。 

    例如test有一行是tttt.tgz,那么会变成t.tgz,但是hellohellohello会变成helohelohelo. 


    *去掉文件中多余的空行: 

    $tr -s "[12]" < test 

    或$tr -s [" "]<test < font="" style="word-wrap: break-word;">

    这里,假设原来文件test的内容是: 

    111 

    222 


    333 



    444 

    运行之后,标准输出: 

    111 

    222 

    333 

    444 

    而原来文件的内容不会改变。 


    *删除文件中的^M,并代之以换行: 

    $tr -s "[15]" "[ ]"<test < font="" style="word-wrap: break-word;">

    或$tr -s "[ ]" "[ ]<test < font="" style="word-wrap: break-word;">

    一般来说,windows上面编辑的文件拿到linux上面来没行的结尾可以会有这样的符号,实际上直接cat也看不出^M符号。 


    *替换文件test中所有冒号,代之以逗号: 

    $tr -s "[:]" "[,]"<test < font="" style="word-wrap: break-word;">

    或$tr -s ":" ","<test < font="" style="word-wrap: break-word;">


    *显示$PATH变量将":"变成回车: 

    echo $PATH | tr ":" " " 

    这里,用 echo $PATH 或者 echo $LD_LIBRARY_PATH 等类似的命令来显示路径信息的话,我们看到的将会是一大堆用冒号连接在一起的路径, tr命令可以把这些冒号转换为回车,这样,这些路径就具有很好的可读性了. 


    *以上命令在vi中进行处理: 

    1,$!tr -s ":" "," 

    这样,会直接修改vi编辑的文件,可以在vi内使用所有这些命令!只要记住:在tr命令前要加上您希望处理的行范围和感叹号 (!),如 1,$!tr -d ' '(美元符号表示最后一行)。 


    *替换第一个参数字符集之外的字符为指定字符: 

    tr -c [boy] "k"<trtest < font="" style="word-wrap: break-word;">

    输入之后,输出如下: 

    kkkkokboykkookk 

    这里,会把属于第一个参数的字符集中的字符之外的所有,都替换成第二个参数对应的字符。第二个参数必须是单个字符,如果是多个字符,则取最后一个,例如"ka"等价于'a'. 

    使用"cat trTest"查看文件的内容如下: 

    hello 

    boy 

    good 


    *删除set1字符集指定的字符: 

    $tr -d bld<trtest < font="" style="word-wrap: break-word;">

    或$tr -d [bld]<trtest < font="" style="word-wrap: break-word;">

    输入之后,输出如下: 

    heo 

    oy 

    goo 

    这样,会删除trTest文件中的所有"bld"三个字符。这里使用cat查看trTest文件内容如下: 

    $cat trTest 

    hello 

    boy 

    good 


    *把文件中的小写字符转换成大写的: 

    $tr a-z A-Z<testtr < font="" style="word-wrap: break-word;">

    或$tr [a-z] [A-z]<testtr < font="" style="word-wrap: break-word;">

    输入之后,输出如下: 

    111 

    222 

    HELLO 

    这里,testTr内容如下: 

    111 

    222 

    hello 


    *使用-t替换字符,set1超出set2的部分忽略: 

    $tr -t hld boy < trTest 

    输入之后,输出如下: 

    beooo 

    boy 

    gooy 

    这样,会依次把h,l,d替换成b,o,y如果是hldg那么多出来的字符g忽略,如果没有-t那么多出来的所有字符被替换成boy的最后一个字符y. 

    这里trTest文件的内容: 

    $cat trTest 

    hello 

    boy 

    good 


    原文:http://blog.chinaunix.net/uid-9525959-id-2001634.html

  • 相关阅读:
    sql语句的删除
    JDK 11中的ZGC-一种可扩展的低延迟垃圾收集器
    强大的IDEA开发工具
    微信H5支付证书过滤
    statusText 报错parsererror
    python 爬取页面数据,生成词云和网络图
    springboot 跳转页面
    org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'xxx' is not present 报错解决
    airtest 中报错 'gbk' codec can't encode character 'xa5' in position 170: illegal multibyte sequence
    Error:(5, 45) java: 程序包org.springframework.boot.test.context不存在 解决
  • 原文地址:https://www.cnblogs.com/zclzqbx/p/4687041.html
Copyright © 2011-2022 走看看