Este não é um trabalho para o grep, mas para uma ferramenta melhor como o awk.
A solução mais fácil é usar o gnu awk com um separador de registro personalizado RS como Section
.
Usando a palavra "Seção" para separar linhas, o que estiver entre as palavras Section 1
e Section 2
será considerado como uma linha para o awk.
O mesmo para a Seção 2 - Seção 3, etc.
Agora você só precisa imprimir a "linha" correta = a "linha" que inclui o interesting-pattern
.
$ awk -v RS="# Section " '/interesting-pattern/{print RT $0}' file1
# Section 2
###############
some text
more text
some more text
interesting-pattern
some text
more text
some more text
###############
Como o gnu awk pode aceitar regex no RS (Record Separator) você também pode aplicar algo mais complicado no RS assim:
$ awk -v RS="###############\n# Section " '/interesting-pattern/{print RT $0}'
###############
# Section 2
###############
some text
more text
some more text
interesting-pattern
some text
more text
some more text
PS: {print RT
instrui o awk a imprimir o Separador de Registros usado atualmente