我正在尝试在用户输入的字符串中返回每个大写字母。所有字符都是UTF-8,没有一个是不可见的。例如,假设用户输入“Hello World”,Bash应返回H和W:
str="Hello World"; [[ "$str" =~ [A-Z] ]] && echo ${BASH_REMATCH[@]}
我尝试过各种各样复杂的模式,但是我没有让它们发挥作用。
我能想到的工作最简单的模式只返回第一个匹配,H。奇怪的是它会匹配http://www.regexr.com/上的H和W.
谁可以帮助我使用正确的模式来匹配任何字符串中的所有大写字母,这会模仿grep -o
?
(GNU bash,版本3.2.53(1)-release(x86_64-apple-darwin13))
(在重新阅读@chepner发布到我以前的一个问题后,编辑为将所有出现的'正则表达式'或'正则表达式'替换为'模式':multiple replacements on a single variable)
答案 0 :(得分:3)
使用bash builtins:
str="Hello World"
for ((i=0;i<${#str};i++)); do [[ ${str:$i:1} =~ [[:upper:]] ]] && echo ${str:$i:1}; done
输出:
H W