zoukankan      html  css  js  c++  java
  • 【Linux基础】tr命令替换和删除字符

    1.tr命令

    tr可以对来自标准输入的字符进行替换、压缩和删除,可以将一组字符变成另外一组字符。通过使用 tr,您可以非常容易地实现 sed 的许多最基本功能。您可以将 tr 看作为 sed 的(极其)简化的变体。

    tr -c -d -s ["string1_to_translate_from"] ["string2_to_translate_to"] < input-file

    (1)参数选项:

    • -c 用字符串1中字符集的补集替换此字符集,要求字符集为ASCII。
    • -d 删除字符串1中所有输入字符。
    • -s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。
    • input-file是转换文件名。虽然可以使用其他格式输入,但这种格式最常用。

    (2)字符范围:

    指定字符串1或字符串2的内容时,只能使用单字符或字符串范围或列表。
    [a-z]       a-z内的字符组成的字符串。
    [A-Z]       A-Z内的字符组成的字符串。
    [0-9]       数字串。
    octal      一个三位的八进制数,对应有效的ASCII字符。
    [O*n]      表示字符O重复出现指定次数n。因此[O*2]匹配OO的字符串。

    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

    (3)支持以下输入方式:

    [:alnum:]:字母和数字 [:alpha:]:字母 [:cntrl:]:控制(非打印)字符 [:digit:]:数字 [:graph:]:图形字符 [:lower:]:小写字母 [:print:]:可打印字符 [:punct:]:标点符号 [:space:]:空白字符 [:upper:]:大写字母 [:xdigit:]:十六进制字符

     
    2.实例
    (1)把输入的小写转换成大写 (输入完成ctrl+D结束)
    tr  'a-z' 'A-Z'  或  tr [a-z] [A-Z]
    abc
    ABC

    (2)将文件file中出现的"abc"替换为"xyz"

    cat t.txt
      abcda
    cat t.txt |tr 'abc' 'xyz'
       xyzdx
    cat t.txt
       abcda

    备注:凡是在t.txt文件中出现的"a"字母,都替换成"x"字母,"b"字母替换为"y"字母,"c"字母替换为"z"字母。而不是将字符串"abc"替换为字符串"xyz"。这里的替换不修改源文件。

    (3)命令中两个字符个数不一致(-t忽略多余字符)

    //第二字符比第一字符多,则多出的无效
    tr 'abc' 'xyzmn'
      abcdefg
      xyzdefg
    //第一字符比第二字符多,则多出的替换为最后一个字符
    tr 'abcd' 'xyz'
      abcdefg
      xyzzefg
    //-t参数 能对应则转换,不能对应则不转换
    tr -t 'abcd' 'xyz'
      abcdefg
      xyzdefg

    (4)删除文件file中出现的"Snail"字符

    cat file 
    what is Snail
    cat file|tr -d 'Snail'
    wht s 
    cat file 
    what is Snail

    备注:这里,凡是在file文件中出现的'S','n','a','i','l'字符都会被删除!而不是紧紧删除出现的"Snail”字符串。

    (5)删除文件file中出现的换行' '、制表' '字符(不可见字符均需转义)

    cat file | tr -d "
    	"

    (6)-s去除连续重复的字符 (如下只去除连续的c)

    echo "abcccccc sabc"|tr -s 'abc'
    abc sabc

    (7)-s参数也可以替换

    //用空格符40替换制表符11
    cat file | tr -s "11" "40"   
    //把路径变量中的冒号":",替换成换行符"
    "
    echo $PATH | tr -s ":" "
    "

    (8)-c或-C取反 除了字母的都删除 (ctrl+d)结束 ,因为回车换行也给删了

    echo "hello 123 world"|tr -d -c "[:alpha:]"
    helloworld

    3.应用实例

    (1)删除空行(不能使用-d参数,否则则所有回车换行全部会被删掉)

    cat file | tr -s "
    " > new_file

    (2)删除Windows文件“造成”的'^M'字符(这里-s后面是两个参数" "和" ",用后者替换前者)

    cat file | tr -d "
    "cat file | tr -s "
    " "
    "

    (3)加密解密

    通过映射来实现简单的加密解密。古罗马时期发明的凯撒加密的一种变体ROT13,它属于自己本身的逆反;即要还原ROT13,套用加密同样的算法即可得,故同样的操作可用再加密与解密。非常神奇!

    //ROT13加密
    echo "hi,this is amosli" | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' 'NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm'
    uv,guvf vf nzbfyv
    //ROT13解密
    echo "uv,guvf vf nzbfyv" | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' 'NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm'
    hi,this is amosli
    //ROT13加密(简写)
    echo "db2 connenct to etl user etl using etl@123"|tr a-zA-Z n-za-mN-ZA-M
    qo2 pbaarapg gb rgy hfre rgy hfvat rgy@123
    //ROT13解密(简写)
    echo "qo2 pbaarapg gb rgy hfre rgy hfvat rgy@123"|tr a-zA-Z n-za-mN-ZA-M 
    db2 connenct to etl user etl using etl@123

    (4)从输入文本中将不在补集中的所有字符全部删除

    //set1的补集意味着从这个集合中包含set1中没有的所有字符。
    tr -c [set1] [set2]  
    //从输入文本中将不在补集中的所有字符全部删除
    echo "hello 123 world " | tr -d -c '0-9 
    '
    123

    备注:在这里,补集中包含了除数字、空格字符和换行符之外的所有字符,因为指定了-d,所以这些字符全部都会被删除。

    (5)用tr -s去除重复空格压缩字符串

    echo "GNU is  not          UNIX . Recursicve right?" | tr -s  ' '
    GNU is not UNIX . Recursicve right?

    (6)实现了加法运算, tr ' ' '+'使用换行符来替换为'+'然后连接起来,最后多出来一个'+'再接上数字0即实现了加法

    cat sum.txt
    5
    4
    3
    5
    4
    3
    cat sum.txt|echo $[ $(tr '
    ' '+') 0 ]
    24
    cat sum.txt|echo $[ $(tr '
    ' '+') ] 
    -bash: 5+4+3+5+4+3+ : syntax error: operand expected (error token is "+ ")

    参考文档:

    linux命令总结之tr命令

    Linux初级:tr命令基本用法

    tr命令

     
     
  • 相关阅读:
    NTP on FreeBSD 12.1
    Set proxy server on FreeBSD 12.1
    win32 disk imager使用后u盘容量恢复
    How to install Google Chrome Browser on Kali Linux
    Set NTP Service and timezone on Kali Linux
    Set static IP address and DNS on FreeBSD
    github博客标题显示不了可能是标题包含 特殊符号比如 : (冒号)
    server certificate verification failed. CAfile: none CRLfile: none
    删除文件和目录(彻底的)
    如何在Curl中使用Socks5代理
  • 原文地址:https://www.cnblogs.com/badboy200800/p/10389973.html
Copyright © 2011-2022 走看看