我想在一个文件中以一种非贪婪的方式抓取一个具有开始和结束标记的模式的多行。
例如,我有以下输入:
文件.txt
START
test1
test2
foo
END
some
more text
START
test3
bar
test4
test5
END
even more
START
baz
test6
END
Run Code Online (Sandbox Code Playgroud)
现在我想查找bar并打印出START和END之间的所有内容,以便我得到:
START
test3
bar
test4
test5
END
Run Code Online (Sandbox Code Playgroud)
到目前为止,我所拥有的是以下 grep 命令:
grep -Pzo '(?s)START.*?bar.*?END' file.txt
Run Code Online (Sandbox Code Playgroud)
问题是,这个表达式是贪婪的并打印出:
START # starts at first "START"-tag, not the next one
test1 #
test2 #
foo #
END #
some #
more text #
START
test3
bar
test4
test5
END
Run Code Online (Sandbox Code Playgroud)
这不是用 grep 标志--before-context / --after-context 完成的 …