我想使用sed
在第一次出现的MATCH1
和下一次出现的MATCH2
之间提取STRING。echo "abcd MATCH1 STRING MATCH2 efgh MATCH1 ijk MATCH2 MATCH2 lmnop MATCH1" | sed...
我以各种方式尝试了此操作,但是由于MATCH1
和MATCH2
都可能连续出现几次,因此提取STRING变得很困难。知道我怎样才能达到这个结果吗?
最佳答案
它们仅返回匹配项之间的字符串,即使MATCH1 == MATCH2
也可以正常工作。
echo ... | grep -Po '^.*?\K(?<=MATCH1).*?(?=MATCH2)'
这是
sed
解决方案:echo ... | sed 's/MATCH1/&\n/;s/.*\n//;s/MATCH2/\n&/;s/\n.*//'
与其他一些解决方案相比,这些解决方案的优势在于,每个解决方案仅包含一个对单个实用程序的调用。