如何从之前用几行从文本文件中提取特定行?

时间:2013-08-21 13:53:13

标签: logging text

我有一组大型服务器日志文件,其中包含我感兴趣的记录错误,如下所示:

2013-08-14 07:49:00,490 [ajp-8009-5] ERROR com.el.filter.SiteFilter - Caught Top-Level Exception - request=http://www.site2.com/something/home.dept?page=error&buy=123&switchcurrency=EUR
java.lang.NullPointerException
    at com.el.servlet.Helper.checkJData(Helper.java:1205)
    at com.el.servlet.ElServlet.doPost(ElServlet.java:113)

(...)

2013-08-14 08:18:37,984 [ajp-8009-3] ERROR com.el.filter.SiteFilter - Caught Top-Level Exception - request=http://www.site1.com/productId=123456.html
java.lang.NullPointerException
    at com.el.servlet.Helper.checkJData(Helper.java:1205)
    at com.el.servlet.ElServlet.doPost(ElServlet.java:113)

就像我提到的那些是非常大的文件,其中有很多NullpointerExceptions,由各种各样的东西引起。

我对从所有这些文件中提取在checkJData方法中导致NPE的网址感兴趣。我知道我可以在com.el.servlet.Helper.checkJData(Helper.java:1205)'中查找所有行,但是如何在此之前获得两行?

Windows中是否有工具可以执行此操作?如果不是bash脚本也不错。

2 个答案:

答案 0 :(得分:1)

使用bash脚本:

egrep -B1 "java.lang.NullPointerException" * | grep "request=" | cut -d"=" -f2-

而不是*将路径放到那些日志文件中。

答案 1 :(得分:0)

Windows解决方案:它使用名为findrepl.bat的帮助程序批处理文件 - http://www.dostips.com/forum/viewtopic.php?f=3&t=4697

findrepl "at com.el.servlet.Helper.checkJData\(Helper.java:1205\)" /o:-2:+0 <file.log