如何使用上下文行使用grep时,如何摆脱“ – ”行分隔符?

我有一个名为compare.txt的文本文件,我想提取包含模式“nmse_gain_constant”的每一行后面的单行。 以下命令让我closures:

grep -A 1 nmse_gain_constant compare.txt | grep -v nmse_gain_constant 

但是这包括每行所需文本之间的分隔符“ – ”。 任何容易的想法如何摆脱“ – ”线?

我会给你一些示例文本,但是这个“ – ”字符会被这个网页错误地解释为控制字符,你会看到的是不正确的。

我这样做:

  grep ... | grep -v -- "^--$" 

但是,这也工作!

 grep --no-group-separator ... 

而且它不会吐出那个“ – ”甚至是空白的一行。

有一个grep的未公开的参数:“–group-separator”,它覆盖默认的“ – ”。 你可以把它设置成“”来摆脱双重冲刺。 尽pipe如此,你还是得到一个空白的线。 我有同样的麻烦,通过阅读grep的源代码发现这个参数。

那么,默认情况下, A开关将添加这些字符,所以它不是神秘的。

man grep状态:

 -A NUM Places a line containing a group separator (--) between contiguous groups of matches. With the -o or --only-matching option, this has no effect and a warning is given. 

但是你可以使用一个简单的sed来清理结果:

 yourgrep | sed '/^--$/d' 

如果您使用AWK,则不需要pipe道input太多grep或使用其他工具(例如sed):

 awk '/nmse_gain_constant/{getline;print }' compare.txt 

一个解决scheme将是:

 grep -A 1 nmse_gain_constant compare.txt | grep -v nmse_gain_constant | grep -v "\-\-"