How can I make 'grep' show a single line five lines above the grepped line?
我已经看过一些前后点击线的例子,但是我想忽略中间线。
所以,我之前想要五行,但没有别的。
可以这样做吗?
好的,我认为这会做你想要的。 它将寻找一个模式,并在每场比赛前提取第5行。
1 2 | grep -B5"pattern" filename | awk -F ' ' 'ln ~ /^$/ { ln ="matched"; print $1 } $1 ~ /^--$/ { ln ="" }' |
基本上它是如何工作的,它需要第一行,打印它,然后等待它看到
这是选项-B
1
2
3
4 -B NUM, --before-context=NUM
Print NUM lines of leading context before matching lines.
Places a line containing -- between contiguous groups of
matches.
如果您只想在比赛前获得第5行,您可以这样做:
1 | grep -B 5 pattern file | head -1 |
编辑:
如果你可以有多个匹配,你可以试试这个(用你的实际模式交换
1 2 3 4 5 6 7 | sed -n '/pattern/!{H;x;s/^.* \(.* .* .* .* .*\)$/\1/;x};/pattern/{x;s/^\([^ ]*\).*$/\1/;p}' file |
我从Sed教程中获取了这一部分:在保持缓冲区中保留多行,示例2并稍微调整一下。
这种方式对我来说更容易:
1 | grep --no-group-separator -B5"pattern" file | sed -n 1~5p |
这包括模式之前的5行,包括模式,关闭---组分隔符,然后打印每5行。