Se um arquivo contiver o seguinte:
Line 1
FooLine 5
Line 2
Line 55
Line 3
Line 4
Line 5
Line 6
Line 7
Line 5
Line 8
Line 9
Como deletar as linhas abaixo de duas linhas após a "Linha 5", para que o arquivo agora contenha apenas o seguinte?
Line 1
FooLine 5
Line 2
Line 55
Line 3
Line 4
Line 5
Line 6
Line 7
Nota: Esta é uma versão ligeiramente melhorada e invertida da pergunta Exclua todas as linhas antes de n linhas acima da linha que contém a primeira correspondência
Com
sed
:Para editar o arquivo no local, adicione a
-i
opção para GNUsed
ou compatível ou-i ''
para FreeBSDsed
ou compatível.Aqui estão algumas maneiras, ambas assumindo que você deseja começar a excluir duas linhas após uma linha que contém nada além da string exata
Line 5
:perl
Você pode usar
perl -i -lne '$k=$. if /^Line 5$/; print; exit if $k and $.==$k+2;' file
para editar o arquivo no local.awk
Usando qualquer awk:
Consulte print-with-sed-or-awk-a-line-following-a-matching-pattern/17914105#17914105 para obter uma explicação e expressões idiomáticas relacionadas.
Usando o awk:
Usando 2 vias de passagem
Ou usando
ed
ligeiramente alterado :