Exclua várias linhas com texto e chaves

0

Eu tenho vários arquivos que contêm algo como:

this is a test1
 {
test 123
test 456
test 789
}

this is a test2
 {
test 123
test 456
test 789
}

this is a test3
 {
test 123
test 456
test 789
}

Precisa excluir uma seção:

this is a test2
 {
test 123
test 456
test 789
}

as linhas entre chaves podem ser diferentes (menos ou mais linhas) Eu tentei algo como:

sed -i 's|This is a test2 *.* !}||g' *

e

sed -i 's|This is a test2, !}||g' *

mas sem sucesso

    
por Tsvetan Krastanov 07.09.2015 / 09:55

2 respostas

0

e

sed -e '/this is a test2/,/}/d'

que basicamente

  • -e diz ao sed para usar o próximo padrão
  • /this is a test2/,/}/ selecione a linha entre this is a test2 e }
  • d eliminá-lo

Uso

 sed -e '/this is a test2/,/}/d' A > B
  • aplica sed de um arquivo em B

    sed -i  -e '/this is a test2/,/}/d' A
    
  • edite diretamente em A

por 07.09.2015 / 10:21
1

Uma abordagem simples com o awk:

awk '/test2/,/^}/{next}1' file > newfile

(tem a desvantagem de deixar uma linha em branco, o que pode não ser aceitável ...)

    
por 07.09.2015 / 10:46

Tags