bash脚本提取正则表达式模式的所有匹配项

Nee*_*ran 4 bash shell

我找到了这个,但它假设这些单词是空格分隔的.

result="abcdefADDNAME25abcdefgHELLOabcdefgADDNAME25abcdefgHELLOabcdefg"

for word in $result
do
    if echo $word | grep -qi '(ADDNAME\d\d.*HELLO)'
    then
        match="$match $word"
    fi
done
Run Code Online (Sandbox Code Playgroud)

POST编辑

为了清晰起见重新命名:

data="abcdefADDNAME25abcdefgHELLOabcdefgADDNAME25abcdefgHELLOabcdefg"
for word in $data
do
    if echo $word | grep -qi '(ADDNAME\d\d.*HELLO)'
    then
        match="$match $word"
    fi
done
echo $match
Run Code Online (Sandbox Code Playgroud)

原来左边所以评论询问result继续有意义.

Pau*_*ce. 8

编辑:回答编辑过的问题:

for string in "$(echo $result | grep -Po "ADDNAME[0-9]{2}.*?HELLO")"
do
    match="${match:+$match }$string"
done
Run Code Online (Sandbox Code Playgroud)

原始答案:

如果您使用的是Bash 3.2或更高版本,则可以使用其正则表达式匹配.

string="string to search 99 with 88 some 42 numbers"
pattern="[0-9]{2}"
for word in $string
do
    [[ $word =~ $pattern ]]
    if [[ ${BASH_REMATCH[0]} ]]
    then
        match="${match:+match }${BASH_REMATCH[0]}"
    fi
done
Run Code Online (Sandbox Code Playgroud)

结果将是"99 88 42".


Dae*_*yth 7

grep -o

-o, --only-matching 只显示匹配 PATTERN 的行的一部分

  • 7 年后,这正是我所需要的 (3认同)