linux - 使用 sed 或 awk 从文件中删除函数

标签 linux bash awk command-line sed

我想删除函数 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/

相关文章:

linux - Perl:如何在 Linux 中从 .txt 文件添加用户

linux - 在 bash 中将字符串作为包含管道的命令执行

windows - CPU处于保护模式时如何读/写硬盘?

python脚本根据需要运行命令

regex - 提取文件名到第一个破折号

regex - cmd如何重命名序列号和目录名

linux - 删除 dos 行尾并再次加入行备份的最佳工具

bash - while循环bash脚本

bash - sed 分行(高级)

linux - 查找文件中重复的名称