我想删除函数 engine "map"{ ... "foobar"... }
。
我尝试了很多方法,这很难,因为它有空行和末尾的 '}',分隔符不起作用
mainfunc {
var = "baz"
engine "map" {
func {
var0 = "foo"
border = { 1, 1, 1, 1 }
var1 = "bar"
}
}
}
mainfunc {
var = "baz"
engine "map" {
func {
var0 = "foo"
border = { 1, 1, 1, 1 }
var1 = "foobar"
}
}
}
... # more functions like 'mainfunc'
我试过了
sed '/engine/,/^\s\s}$/d' file
但是删除了所有引擎函数,我只需要包含“foobar”的函数,也许模式匹配所有内容甚至换行符直到 foobar 是这样的:
sed '/engine(.*)foobar/,/^\s\s}$/d' file
这可能吗?
最佳答案
尝试:
sed '/engine/{:a;N;/foobar/{N;N;d};/ }/b;ba}' filename
或:
awk '/engine/{c=1}c{b=b?b"\n"$0:$0;if(/{/)a++;if(/}/)a--;if(!a){if(b!~/foobar/)print b;c=0;b="";next}}!c' filename
关于linux - 使用 sed 或 awk 从文件中删除函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33516176/