我有一个名为compare.txt的文本文件,我想提取包含模式"nmse_gain_constant"的每一行后面的单行.以下命令让我关闭:
grep -A 1 nmse_gain_constant compare.txt | grep -v nmse_gain_constant
Run Code Online (Sandbox Code Playgroud)
但是这包括每行所需文本之间的分隔符" - "行.任何简单的想法如何摆脱" - "线?
我在这里给你一些示例文本,但是这个网页帖子错误地将" - "字符解释为控制字符,你会看到的不正确.
Eri*_*sty 86
我这样做:
grep ... | grep -v -- "^--$"
Run Code Online (Sandbox Code Playgroud)
但这也有效!
grep --no-group-separator ...
Run Code Online (Sandbox Code Playgroud)
并且它不会吐出" - "甚至是空白行.
小智 24
有一个未记录的grep参数:" - group-separator",它会覆盖默认的" - ".您可以将其设置为""以摆脱双破折号.虽然,你仍然得到一个空行.我遇到了同样的麻烦,通过阅读grep的源代码找到了这个参数.
Edd*_*die 20
好吧,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.
Run Code Online (Sandbox Code Playgroud)
但是你可以使用一个简单的sed来清理结果:
yourgrep | sed '/^--$/d'
Run Code Online (Sandbox Code Playgroud)
如果使用AWK,则无需使用如此多的greps或使用其他工具(例如,sed):
awk '/nmse_gain_constant/{getline;print }' compare.txt
Run Code Online (Sandbox Code Playgroud)
一种解决方案是:
grep -A 1 nmse_gain_constant compare.txt | grep -v nmse_gain_constant | grep -v "\-\-"
Run Code Online (Sandbox Code Playgroud)