问:
在bash中有没有一种方法可以将字符串转换为小写字符串?
例如,如果我有:
代码语言:shell复制a="Hi all"
我想把它转换为:
代码语言:shell复制"hi all"
答:
有多种方法。
符合POSIX标准的:
使用 tr 命令
代码语言:shell复制$ a="Hi all"
$ echo "$a" | tr '[:upper:]' '[:lower:]'
hi all
使用 awk 命令
代码语言:shell复制$ a="Hi all"
$ echo "$a" | awk '{print tolower($0)}'
hi all
非POSIX标准的:
使用 bash 中的 Shell 参数扩展
代码语言:shell复制para="A Few WORDS"
echo "${para,,}"
bash 手册里关于这块的语法格式如下
代码语言:shell复制${parameter^pattern}
${parameter^^pattern}
${parameter,pattern}
${parameter,,pattern}
其中 "^" 运算符将匹配模式的小写字母转换为大写;"," 运算符将匹配的大写字母转换为小写。"^^" 和 ",," 扩展将转换扩展值中的每个匹配字符;"^" 和 "," 扩展仅匹配并转换扩展值中的第一个字符。
如果省略了 pattern,则将其视为 "?",它匹配每个字符。
使用 sed 命令
代码语言:shell复制str="Hello World"
echo $str | sed -e 's/(.*)/L1/'
使用 perl 命令
代码语言:shell复制str="Hello World"
echo $str | perl -ne 'print lc'
另外还可以使用 python 命令
代码语言:shell复制str="Hello World"
python -c "print '$str'.lower()"
参考:
- stackoverflow question 2264428
- https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion
相关阅读:
- 在bash中:-(冒号破折号)的用法
- 如何通过一个Bash定界符来分割一个字符串
- 用Bash变量进行sed替换