你有什么想法如何添加一些结束线
"=========================================================================================="
每场比赛之后
tail -f error.log -n 2000 | grep -B 10 -A 25 'Exception:'
这个命令打印所有exception日志,但我喜欢看到每个exception日志一个分隔线。
你想要以下选项:
–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 =====