使用类似grep的工具删除周围的线条

时间:2014-05-09 17:58:02

标签: unix awk sed grep

我正在使用gcov从我的程序中获取代码覆盖率结果,它运行良好,但我想从覆盖率为0%的文件中删除结果。

它打印出所需的输出到stdout,但我得到格式为

的附加输出
File [directory]
Lines executed:0.00% of [lines]
[newline]

这就是我要删除的输出。还有其他文件,但它们的覆盖率值大于0.00%,因此我希望它们保留。我只想删除0.00%之前和之后的行。

所以我基本上想做grep -v -C 1 :0.00%

除非无法正常工作,grep -C 1 :0.00%符合我要删除的内容,而grep -v :0.00%只删除0%的行,但它们无法一起使用。是否有其他类似grep的工具可以执行此操作,还是我的格式错误?

2 个答案:

答案 0 :(得分:2)

  

我只想删除0.00%之前和之后的行。

你可以使用GNU sed:

sed 'N;/\n.*0.00%.*/!{P;D};N;d' inputfile

答案 1 :(得分:1)

将GNU awk用于多字符RS;

$ cat file
foo
File [directory]
Lines executed:0.00% of [lines]
[newline]
bar

$ gawk -v RS='^$' -v ORS= '{sub(/[^\n]+\n[^\n]+:0.00%[^\n]+\n[^\n]+\n/,"")}1' file
foo
bar

以上只是查找描述包含:0.00%(即[^\n]+:0.00%[^\n]+\n)的行的RE,然后将其与之前的行(即[^\n]+\n)和之后的行一起删除它(同样的RE)。