我找到了这个,但它假设这些单词是空格分隔的.
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继续有意义.
编辑:回答编辑过的问题:
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".