小编bob*_*bel的帖子

以多行开始和结束标记按模式抓取文本

我想在一个文件中以一种非贪婪的方式抓取一个具有开始和结束标记的模式的多行。

例如,我有以下输入:

文件.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并打印出STARTEND之间的所有内容,以便我得到:

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 完成的 …

text-processing regular-expression

10
推荐指数
1
解决办法
1469
查看次数