您是否知道如何添加一些结束行,如
"=========================================================================================="
每场比赛后
tail -f error.log -n 2000 | grep -B 10 -A 25 'Exception:'
此命令打印所有异常日志,但我喜欢看到每个异常日志的一个分隔线。
答案 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
=====