sed -ne '/pattern/{n;n;n;n;d;}' -e p
Excluiria a linha correspondente ao padrão e 4 linhas depois disso.
Se você não quiser excluir a linha que corresponde ao próprio padrão:
sed -ne '/pattern/{p;n;n;n;n;d;}' -e p
Explicação: se a linha atual corresponder ao padrão , [p] rint it, então obtenha o [n] ext one, e [n] ext e [n] ext, e [n] ext e [d] é o cartão. Por causa do [d] iscard, o comando [p] rint não é executado nesse caso. É executado para todas as outras linhas. -n
desativa a impressão automática (que imprime quase tudo) e, portanto, implica o uso de -e p
, que garante que as linhas resultantes sejam impressas.
Exemplo:
$ seq 8 | sed -ne '/2/{p;n;n;n;n;d;}' -e p
1
2
7
8
Para poder especificar o número de linhas como um número, seria mais fácil com awk
:
awk 'n>0 {n--;next}; /pattern/{n=4}; 1'
(note que em todas essas soluções, o padrão não é procurado nas linhas que estão sendo ignoradas).