I have a text file named compare.txt
where I want to extract the single line that follows every line that contains the pattern nmse_gain_constant
.
There is no need to pipe to so many greps or use other tools (for example, sed) if you use AWK:
awk '/nmse_gain_constant/{getline;print }' compare.txt
There is an undocumented parameter of grep: "--group-separator", which overrides the default "--". You can set it to "" to get rid of the double dash. Though, you still get an empty line. I had the same trouble, and found this param by reading the source code of grep.
One solution will be:
grep -A 1 nmse_gain_constant compare.txt | grep -v nmse_gain_constant | grep -v "\-\-"
I do this:
grep ... | grep -v -- "^--$"
But this works too (on many, not all OS'es)!
grep --no-group-separator ...
And it doesn't spit out that "--" or even a blank line.
Well, the A
switch by default will add those characters, so it's no mystery.
man grep
states:
-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.
But you can use a simple sed to clean up the result:
yourgrep | sed '/^--$/d'