在 bash 中使用正则表达式在字符串中进行多个匹配

pn1*_*ude 4 bash bash4

一直在寻找有关 bash 正则表达式的一些更高级的正则表达式信息,但没有找到太多相关信息。

这是一个简单的字符串的概念:

myString="DO-BATCH BATCH-DO"

if [[ $myString =~ ([[:alpha:]]*)-([[:alpha:]]*) ]]; then
 echo ${BASH_REMATCH[1]} #first perens
 echo ${BASH_REMATCH[2]} #second perens
 echo ${BASH_REMATCH[0]} #full match
fi

outputs:
BATCH
DO
DO-BATCH
Run Code Online (Sandbox Code Playgroud)

很好,它完成了第一场比赛(BATCH-DO),但是我如何拉第二场比赛(DO-BATCH)?我只是在这里画一个空白,找不到关于 bash 正则表达式的太多信息。

pn1*_*ude 5

好的,我这样做的一种方法是将其放入 for 循环中:

myString="DO-BATCH BATCH-DO"
for aString in ${myString[@]}; do
    if [[ ${aString} =~ ([[:alpha:]]*)-([[:alpha:]]*) ]]; then
     echo ${BASH_REMATCH[1]} #first perens
     echo ${BASH_REMATCH[2]} #second perens
     echo ${BASH_REMATCH[0]} #full match
    fi
done

which outputs:
DO
BATCH
DO-BATCH
BATCH
DO
BATCH-DO
Run Code Online (Sandbox Code Playgroud)

这是有效的,但我有点希望如果可能的话,从一个正则表达式中提取所有内容。