美文网首页
SHELL 中英文字母大小写转换

SHELL 中英文字母大小写转换

作者: millions_chan | 来源:发表于2017-03-21 13:00 被阅读1315次

    大小写转换


    大小写转换是一个常用功能,每种语言通常都提供了支持,那么在shell中怎么进行大小写转换呢?

    • 大写转小写
     echo $TEXT | tr "[A-Z]" "[a-z]"
    
    • 小写转大写
     echo $TEXT | tr "[a-z]" "[A-Z]"
    

    TR命令解释


    tr可以非常容易地实现 sed 的许多基本功能。它可以用一个字符来替换另一个字符,或者可以完全除去一些字符。

    其命令格式为:

    tr [option] ["string1"] ["string2"] < file

    没有任何选项的时候,tr默认为替换操作,就是将string1在文件中出现的字符替换为string2中的字符,这里要注意的是替换关系。
    -c选项,用string1中字符的补集替换string1,这里的字符集为ASCII。
    -d选项,删除文件中所有在string1中出现的字符。
    -s选项,删除文件中重复并且在string1中出现的字符,只保留一个。

    -c 选项这里需要解释一下,我们来看一个例子:

    ➜  ~ echo "hello, my 2017" | tr -c "0-9" "*"
    **********2017*%
    

    TR命令字符串解释


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

    • [a-z] a-z内的字符组成的字符串。
    • [A-Z] A-Z内的字符组成的字符串。
    • [0-9] 数字串。
    • \octal 一个三位的八进制数,对应有效的ASCII字符。
    • [On] 表示字符O重复出现指定次数n。因此[O2]匹配OO的字符串。

    举几个栗子:

    ➜  ~ echo "hello world" | tr "a-z" "A-Z"
    HELLO WORLD
    
    ➜  ~ echo "hello world" | tr "a-l" "A-Z"
    HELLo worLD
    
    ➜  ~ echo "hello world" | tr "a-z" "A-H"
    HEHHH HHHHD
    

    最后一种情况需要注意,当string2范围比string1小的时候,会出现这种意料之外的情况。

    下面这种使用-s去重。

    ➜  ~ echo "hello world,millions millions" | tr -s "l"
    helo world,milions milions
    
    ➜  ~  echo "hello world,millions" | tr -s "a-z"
    helo world,milions
    
    ➜  ~ echo "I'm 22 years old" | tr -s "0-9"
    I'm 2 years old
    

    想要去除空行可以使用tr -s "\n" < inputfile 这样有单独的"\n"就会被删除。

    使用-d 可以删除出现的字符:

    ➜  ~ echo "I'm 22 years old" | tr -d "0-9"
    I'm  years old
    

    相关文章

      网友评论

          本文标题:SHELL 中英文字母大小写转换

          本文链接:https://www.haomeiwen.com/subject/hoiwnttx.html