Uma possível solução é:
.*<matching pattern>(.*\r?\n){<N+1>}
em que N
é o número de linhas que desejo remover após a linha que contém o padrão.
Para o exemplo dado, isso se traduz em:
.*bbbb(.*\r?\n){6}
É assim que parece no grepWin:
Notaslaterais:
- Naguia"A sequência de caracteres de pesquisa regex corresponde", também a linha
5aldfkld
está marcada para ser correspondida; na verdade, uma barra de rolagem é visível à direita - (específico do grepWin) Devido a um pequeno bug, ao aplicar essa pesquisa nos arquivos, você verá a contagem de correspondências aumentando em 7 para cada correspondência! Provavelmente, isso ocorre porque o contador de correspondência conta quantas linhas são correspondidas e, nesse caso, o padrão cobre 7 linhas: a linha correspondente, as 5 linhas seguintes e a linha alcançada com o último feed de linha
- (sed específico) Esse regex não funciona para
sed
, que não suporta totalmente regex e tem .
O seguinte explica como cheguei à solução.
Eu comecei em:
.*bbbb.*\n.*\n.*\n.*\n.*\n.*\n
que não funcionaria no meu sistema. Mas o seguinte funcionaria:
.*bbbb.*\r\n.*\r\n.*\r\n.*\r\n.*\r\n.*\r\n
Então, estou trabalhando em um sistema CRLF. No entanto, isso não parece muito bonito nem portátil.
Eu posso torná-lo um pouco mais portátil (e mais feio :-)) fazendo:
.*bbbb.*\r?\n.*\r?\n.*\r?\n.*\r?\n.*\r?\n.*\r?\n
(O retorno de carro se torna opcional). Ainda parece feio, mas posso coletar o termo repetitivo:
.*bbbb(.*\r?\n){6}
Este guia foi muito útil.