我有一个包含一堆长行的文件。我想抓取两个模式之间的每一组并将它们打印到一个新文件中,每行一个匹配。我可以设法使用 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|$)'