SHELL 中英文字母大小写转换

大小写转换


大小写转换是一个常用功能,每种语言通常都提供了支持,那么在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 中英文字母大小写转换)