grep命令在每次匹配后添加结束行

你有什么想法如何添加一些结束线

"==========================================================================================" 

每场比赛之后

 tail -f error.log -n 2000 | grep -B 10 -A 25 'Exception:' 

这个命令打印所有exception日志,但我喜欢看到每个exception日志一个分隔线。

Solutions Collecting From Web of "grep命令在每次匹配后添加结束行"

你想要以下选项:

–group分离器SEP =
使用SEP作为组分隔符。 默认情况下,SEP是双连字符( – )。

演示:

 $ cat file before exception 1 after foo bar before exception 2 after $ grep -A 1 -B 1 --group-separator======================== exception file before exception 1 after ======================= before exception 2 after 

对于像我这样拥有“非常古老”的grep,不包括--group-separator选项的人来说,下面的解决方法似乎是可以接受的。

注意到grep (我的版本,2.5.1)确实在组( -- )之间产生了一个“小的,默认的”分隔符,你可以很容易地用你选择的字符串替换这个字符串:

 tail -f rms.log -n 2000 | grep -B 10 -A 25 'Exception:' | sed 's/^--$/=================/' 

这确实取代了--============

显然你可以修改这个你喜欢的。 如果你可以选择使用–group --group-separator (@ sudo_O的答案),那显然是可取的。

编辑阅读下面的问题的意见,我知道,当@starrify更新他的评论(我没有注意到之前)他的评论基本上直接指向这个解决方案 – 所以我觉得我拥有他的帽子一角…

我更喜欢sed文本处理:

 # cat test 1 Exception 2 Exception 3 4 Exception 5 Exception 6 7 8 Exception 9 # sed -i '/Exception/a =========================' test # cat test 1 Exception ========================= 2 Exception ========================= 3 4 Exception ========================= 5 Exception ========================= 6 7 8 Exception ========================= 9 

你发布了一个不做你想要的命令并描述它的输出,但是你没有告诉我们你想要什么,所以这是一个猜测,但也许会有用。 它打印2行之前和3行之后的一些正则表达式:

 $ cat file a b c d FOO e f g h i j FOO k l m n o $ awk -v re="FOO" -vb=2 -va=3 'NR==FNR{line[FNR]=$0;next} $0 ~ re{for (i=(FNR-b);i<=(FNR+a);i++) print line[i]; print "=====" }' file file c d FOO e f g ===== i j FOO k l m =====