使用模式和$ BASH_REMATCH匹配字符串中的多个大写字母

时间:2014-11-23 13:11:11

标签: regex bash

我正在尝试在用户输入的字符串中返回每个大写字母。所有字符都是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

1 个答案:

答案 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