大小写转换
大小写转换是一个常用功能,每种语言通常都提供了支持,那么在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
网友评论