use*_*020 4 grep sed regular-expression
我有一个包含一堆长行的文件。我想抓住两个模式之间的每一组并将它们打印到一个新文件中,每行一个匹配。我可以设法用 Python 做到这一点,但我更喜欢只使用命令行工具来完成这项任务。如果没有结束模式,我想抓住一切,直到行尾。
就像是:
input:
xxSTART relevanttext xxEND something else xxSTART even more relevant
output:
relevanttext
even more relevant
Run Code Online (Sandbox Code Playgroud)
如果 GNU grep 是一个选项,您可以传递-P(与 perl 兼容的正则表达式)标志并使用前瞻断言、后视断言和非贪婪匹配来提取您需要的内容
echo 'xxSTART relevanttext xxEND something else xxSTART even more relevant' |\
grep -oP '(?<=START).*?(?=xxEND|$)'
relevanttext
even more relevant
Run Code Online (Sandbox Code Playgroud)
或者正如 Stephane Chazelas 建议的那样,使用漂亮的\K代替后视断言
echo 'xxSTART relevanttext xxEND something else xxSTART even more relevant' |\
grep -oP 'START\K.*?(?=xxEND|$)'
Run Code Online (Sandbox Code Playgroud)