如何使用上下文行使用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 "\-\-"