我有一个名为compare.txt的文本文件,我想提取包含模式“nmse_gain_constant”的每一行的单行。以下命令让我关闭:
grep -A 1 nmse_gain_constant compare.txt | grep -v nmse_gain_constant
但是这包括每行所需文本之间的分隔符“ - ”行。任何简单的想法如何摆脱“ - ”线?
我在这里给你一些示例文本,但是这个网页帖子错误地将“ - ”字符解释为控制字符,你会看到的不正确。
答案 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 "\-\-"