获取两个模式之间的所有正则表达式匹配并将它们打印到文件

获取两个模式之间的所有正则表达式匹配并将它们打印到文件

我有一个包含一堆长行的文件。我想抓取两个模式之间的每一组并将它们打印到一个新文件中,每行一个匹配。我可以设法使用 Python 来完成此任务,但我更喜欢仅使用命令行工具来完成此任务。如果没有结束模式,我想抓住一切,直到行尾。

就像是:

input: 
xxSTART relevanttext xxEND something else xxSTART even more relevant

output:
relevanttext
even more relevant

答案1

如果 GNU grep 是一个选项,您可以传递-P(perl 兼容的正则表达式)标志并使用前向断言、后向断言和非贪婪匹配来提取您需要的内容

echo 'xxSTART relevanttext xxEND something else xxSTART even more relevant'  |\
grep -oP '(?<=START).*?(?=xxEND|$)'
relevanttext
even more relevant

或者正如 Stephane Chazelas 建议的那样,使用俏皮的\K代替后视断言

echo 'xxSTART relevanttext xxEND something else xxSTART even more relevant'  |\
grep -oP 'START\K.*?(?=xxEND|$)' 

相关内容