我想使用sed在第一次出现的MATCH1和下一次出现的MATCH2之间提取STRING。
echo "abcd MATCH1 STRING MATCH2 efgh MATCH1 ijk MATCH2 MATCH2 lmnop MATCH1" | sed...
我以各种方式尝试了此操作,但是由于MATCH1MATCH2都可能连续出现几次,因此提取STRING变得很困难。知道我怎样才能达到这个结果吗?

最佳答案

它们仅返回匹配项之间的字符串,即使MATCH1 == MATCH2也可以正常工作。

echo ... | grep -Po '^.*?\K(?<=MATCH1).*?(?=MATCH2)'

这是sed解决方案:
echo ... | sed  's/MATCH1/&\n/;s/.*\n//;s/MATCH2/\n&/;s/\n.*//'

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

10-06 02:05