如何在多行中进行 grep 并使用 -A 选项

How to grep in multiple line and use -A option

如果有人能帮我找出并回答以下案例,将不胜感激。我需要一个应该能够在 bash shell 中执行的解决方案。

假设我有这样的文件,

1.Mary had a little lamb,
2.Little lamb, little lamb,
3.Mary had a little lamb,
4.Its fleece was white as snow
5.And everywhere that Mary went,
6.Mary went, Mary went,
7.Everywhere that Mary went
8.The lamb was sure to go
9.It followed her to school one day
10.School one day, school one day
11.It followed her to school one day
12.Which was against the rules.

我的搜索条件是这样的,

它应该首先搜索单词 little (即第 1 2 和 3 行),在下一行应该有一个单词 fleece (即仅第 4 行)输出应该打印两个匹配行(3 和 4)加上最后搜索行之后的四行,即第 4 行的 fleece。所以最终输出应该是 lines 3,4,5,6,7,8

解决方案可以是 bash shell 脚本、perl 或 python。

请分享您的想法。

通过grep,

$ grep -oPz '(?s)[^\n]*\blittle\b(?:(?!\blittle\b|\bfleece\b).)*fleece[^\n]*(?:\n[^\n]*){4}' file
3.Mary had a little lamb,
4.Its fleece was white as snow
5.And everywhere that Mary went,
6.Mary went, Mary went,
7.Everywhere that Mary went
8.The lamb was sure to go

REGEX DEMO

有点不那么令人困惑,这是一个简单的 Awk 脚本。

awk '/little/ { find_fleece=1; kept=[=10=]; next }
    find_fleece { find_fleece=0; if ([=10=] ~ /fleece/) {
        print kept; print; tail=4; } else { tail=0 }; next }
    tail-- > 0' file