caminho sed do GNU
Em GNU sed
(se você estiver usando alguma distribuição Linux, deve ser a implementação sed
padrão), você pode usar algo assim:
sed '/.production =/,+12d' inputfile.txt
Como funciona:
- Ele verifica o arquivo de entrada linha por linha (é assim que o sed funciona) e verifica se o comando deve ser usado.
- Nosso comando é
d
(o último caractere), o que significa excluir a linha. - Mas este comando só será executado se a linha atual corresponder ao nosso intervalo.
- O intervalo é especificado por dois argumentos (início e fim do intervalo, inclusive) delimitados por
,
character. A primeira é uma expressão regular/.production =/
que corresponde a cada linha que contém essa expressão. O segundo argumento é+12d
, o que significa12 lines from start range
. - Assim, nosso alcance corresponde a cada linha que corresponde à expressão e às próximas 12 linhas e as exclui.
- Todas as outras linhas são impressas na saída (padrão
sed behaviour
).
Caminho portátil e feio
Este deve funcionar em outra implementação de sed
, mas envolve muito mais digitação e não é tão robusto:
sed '/.production =/{N;N;N;N;N;N;N;N;N;N;N;N;d}' somefile.txt
Como funciona:
- Ele verifica o arquivo de entrada linha por linha (é assim que o sed funciona) e verifica se o comando deve ser usado.
- Verifica se a linha corresponde ao padrão
/.production =/
. Em caso afirmativo, ele executa todos os comandos em{}
chaves. - Corremos
N
comamnd 12 vezes. O comandoN
lê a próxima linha e a anexa ao buffer atual. Então, depois de executá-lo 12 vezes, temos 13 linhas concatenadas no buffer atual (primeira linha + 12 leitura porN
de comandos). - Agora executamos o comando
d
, que exclui essas 13 linhas concatenadas. -
sed
continua até encontrar outro padrão e novamente exclui 13 linhas. Todas as outras linhas são impressas (padrãosed
behavior).