Como apagar linhas em um intervalo que corresponde a um padrão de um arquivo com sed? [duplicado]

0

O título diz tudo. Eu tentei várias sintaxes, todas falharam. Talvez isso não seja possível com um único tiro ... É claro que os mecanismos de pesquisa não ajudaram, nem o manual que é difícil de entender, nem o comando info. Todos carecem de um exemplo com um intervalo de "tipo de" pré-seleção

    
por useful 30.12.2016 / 04:12

2 respostas

2

No final, encontrei este oneliner matador:

sed -i '1795,$ {/PaTtErN/d}' file.log 

tenha cuidado com a flag -i e leia o manual antes de tentar

    
por useful 30.12.2016 / 04:13
1

Possível com AWK , também:

bash-4.3$ cat input.txt 
line one
and another line
running out of ideas for text
Oh, look , banana !
some more lines
this is boring
But what is not boring ? text processing !
bash-4.3$ awk 'NR<4; NR>4 && $0!~/banana/' input.txt 
line one
and another line
running out of ideas for text
some more lines
this is boring
But what is not boring ? text processing !

A ideia aqui é imprimir todas as linhas com menos de 4 intocadas. Linhas maiores que 4 que não contenham um padrão específico (neste caso, a palavra "banana") serão impressas e, obviamente, aquelas que o contiverem não serão impressas.

    
por Sergiy Kolodyazhnyy 30.12.2016 / 04:32