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

时间:2013-12-13 13:25:48

标签: linux shell unix grep

您是否知道如何添加一些结束行,如

"=========================================================================================="
每场比赛后

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

此命令打印所有异常日志,但我喜欢看到每个异常日志的一个分隔线。

4 个答案:

答案 0 :(得分:17)

您需要以下选项:

  

- 基团的分离器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

答案 1 :(得分:3)

对于像我这样拥有“非常老”的grep并且不包含--group-separator选项的人,以下似乎是一种可接受的解决方法。

注意到grep(我的版本,2.5.1)确实在组(--)之间产生了“小的,默认的”分隔符,您可以使用您选择的字符串轻松替换该字符串:

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

这会将--替换为============

显然你可以根据自己的喜好修改它。如果您可以选择使用--group-separator(@ sudo_O的答案),那显然更合适。

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

答案 2 :(得分:1)

我更喜欢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

答案 3 :(得分:1)

你发布了一个不能做你想做的命令并描述了它的输出,但你没有告诉我们你想要什么,所以这是一个猜测,但也许它会有用。它打印前面的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" -v b=2 -v a=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
=====