Delete multiple lines with text and curly braces

awksed

I have a multiple files that contains something like:

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
}

Need to delete a section:

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

lines between braces may be a different (less or more lines)
I've tried something like :

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

and

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

but no success

Best Answer

what about

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

which basically

  • -e tell sed to use next pattern
  • /this is a test2/,/}/ select line between this is a test2 and }
  • d delete it

Usage

 sed -e '/this is a test2/,/}/d' A > B
  • apply sed from A file into B

    sed -i  -e '/this is a test2/,/}/d' A
    
  • edit directly into A

Related Question