删除带有文本和大括号的多行

删除带有文本和大括号的多行

我有多个文件,其中包含以下内容:

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
}

需要删除一段:

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

大括号之间的行可能不同(更少或更多行)我尝试过类似的方法:

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

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

但没有成功

答案1

关于什么

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

基本上

  • -e告诉 sed 使用下一个模式
  • /this is a test2/,/}/选择this is a test2和之间的线}
  • d删除它

用法

 sed -e '/this is a test2/,/}/d' A > B
  • 将 sed 从 A 文件应用到 B 文件

    sed -i  -e '/this is a test2/,/}/d' A
    
  • 直接编辑到A

答案2

使用 awk 的简单方法:

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

(有留下空行的缺点,这可能不可接受......)

相关内容