Como remover várias linhas por ocorrência em um arquivo?

10

Digamos que eu tenha este arquivo de linha 857835, contendo coisas como esta:

a1
rubbish1
rubbish2
rubbish3
rubbish4
a1
rubbish5
rubbish6
rubbish7
rubbish8

E desejo remover todas as ocorrências de a1 e a próxima linha ( rubbish1 e rubbish5 neste exemplo). Como faço isso?

Eu testei grep 'a1' -v -A1 sem sucesso e meus conhecimentos de sed não são muito bons:}

Meu Google-fu não conseguiu me ajudar desta vez, alguém, por favor, ajude!

    
por rayfoo 09.02.2011 / 03:46

2 respostas

15

Tente:

sed -e '/^a1$/,+1d' "filename"

Isso significa de / ^ a1 $ / para a próxima linha, delete

O ^ e $ asseguram que você corresponde a linha inteira, portanto, um a1 oculto não será correspondido.

    
por 09.02.2011 / 04:13
12

O seguinte irá funcionar em não-GNU sed (a sintaxe do endereço ,+1 é uma extensão GNU):

sed -e '/^a1$/,/^/d' my_file >my_filtered_file

"Começando em uma linha que lê exatamente 'a1' e terminando na próxima linha para a qual o início da linha existe (ou seja, a próxima linha), exclua."

É muito menos extensível do que a resposta de @ asoundmove, já que excluir um número diferente de linhas levaria um script totalmente diferente.

    
por 09.02.2011 / 05:21