Shell 脚本大小写转换
2018-12-11 本文已影响29人
家中古词
tr
tr
命令专门用来转换(或者删除)一些字符。例如 echo class | tr abc 012
得到 2l0ss
。所以 echo $STR | tr ABCDEF abcdef
就可以实现大写转小写。
但是每次打全 26 个字母显得很愚蠢。tr
也支持一些常用的字符集合定义,例如用 [:upper:]
表示全部大写字母,用 [:lower:]
表示全部小写字母。而且这两个集合中的字符是有序的,即可以一一对应起来。
所以我们的方案是:
echo $STR | tr '[:upper:]' '[:lower:]'
其次,它也支持段描述形式的字符定义,就像这样使用:
echo $STR | tr '[A-Z]' '[a-z]'
调用脚本语言
调用更强脚本语言的解释器很显然也可以完成这样的任务。以下是几个举例:
echo $STR | python3 -c 'print(str.lower(input()))'
echo $STR | ruby -p -e '$_.tr! "A-Z", "a-z"'
echo $STR | awk '{ print tolower($0) }'
echo $STR | perl -ne 'print lc'
这些方案的完成程度不同。例如说 Python 的 input()
只读取一行,ruby 的方案 -p
选项其实是假设后面的语句在 while gets ... end
循环里执行。具体还要参考语言本身的定义。
Bash 4.0
4.0 添加了一个新特性,使用 ${STR,,}
取得全小写;${STR^^}
取得全大写。这应该是打字最少的方法了。
echo ${STR,,}
echo ${STR^^}