sed-在第一次出现的MATCH1和下次出现的MATCH2之间提取STRING

lec*_*tif 5 regex bash sed

使用sed,我想在的第一次出现MATCH1和下次发生之间提取STRING MATCH2

echo "abcd MATCH1 STRING MATCH2 efgh MATCH1 ijk MATCH2 MATCH2 lmnop MATCH1" | sed...

我想这以不同的方式,但考虑到MATCH1MATCH2既有可能连续出现多次,它已经被证明难以提取STRING。知道我怎样才能达到这个结果吗?

Pau*_*ce. 4

这些仅返回匹配项之间的字符串,并且即使MATCH1 == MATCH2.

echo ... | grep -Po '^.*?\K(?<=MATCH1).*?(?=MATCH2)'
Run Code Online (Sandbox Code Playgroud)

这是一个sed解决方案:

echo ... | sed  's/MATCH1/&\n/;s/.*\n//;s/MATCH2/\n&/;s/\n.*//'
Run Code Online (Sandbox Code Playgroud)

与其他一些解决方案相比,这些解决方案的优点是每个解决方案仅包含对单个实用程序的一次调用。