在将grep与上下文行一起使用时,如何摆脱“ - ”行分隔符?

时间:2010-01-30 13:51:40

标签: grep

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

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

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

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

5 个答案:

答案 0 :(得分:77)

我这样做:

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

但这也有效!

grep --no-group-separator ...

并没有吐出“ - ”甚至是空白。

答案 1 :(得分:23)

有一个未记录的grep参数:“ - group-separator”,它会覆盖默认的“ - ”。您可以将其设置为“”以摆脱双破折号。虽然,你仍然得到一个空行。我遇到了同样的麻烦,通过阅读grep的源代码找到了这个参数。

答案 2 :(得分:19)

嗯,默认情况下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'

答案 3 :(得分:6)

如果您使用AWK,则无需使用这么多greps或使用其他工具(例如,sed):

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

答案 4 :(得分:3)

一个解决方案是:

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