Aqui está uma maneira com awk :
awk -vN=85 -vM=5 'BEGIN{c=0}
/PATTERN/{c++
{if (c==N) {l=NR;last=NR+M}}
}{if (NR<=last && NR>=l) print}' infile
Onde N é o N th linha correspondendo PATTERN e M é o número de linhas que seguem. Ele define um contador e quando a correspondência da linha N é encontrada, salva o número da linha. Em seguida, imprime as linhas do atual NR até NR + M .
Para registro, é assim que você faz isso com sed ( gnu sed syntax):
sed -nE '/PATTERN/{x;/\n{84}/{x;$!N;$!N;$!N;$!N;$!N;p;q};s/.*/&\n/;x}' infile
Isso está usando o espaço de espera para contar.
Sempre que encontrar uma linha correspondente a PATTERN it e x altera os buffers e verifica se há ocorrências N-1 do caractere \n ewline no buffer de retenção. Se a verificação for bem-sucedida, e x mudará novamente, puxará as próximas linhas M com o comando $!N e p rints o espaço padrão, em seguida q uits.
Caso contrário, ele adiciona apenas outro caractere \n ewline ao espaço de espera e e x é alterado novamente.
Esta solução é menos conveniente, pois rapidamente se torna incômoda quando M é um grande número e requer que alguns printf -fu construam um script sed (sem mencionar o padrão e manter os limites de espaço com alguns sed s).