我是Unix grep的新手,我想要一些帮助来提出一个grep命令。
目前,我的应用程序日志中存在以下类型的错误:
2012-02-31 10:21:41,333错误[65](GeneralAppliancesBean.java:135) - 异常java.net.ConnectException:连接超时
2012-01-31 10:24:41,843错误[41](FlightStatusBean.java:135) - 异常java.net.SocketTimeoutException:连接超时
2011-01-31 10:22:41,841错误[1](FlightCancellation.java:135) - 异常java.rmi.ConnectException:连接超时
2011-01-31 10:22:41,841 ERROR [1](OrderBean.java:132) - 异常java.rmi.ConnectException:连接超时
我想知道此例外的时间戳(例如2012-02-31 10:21:41,333
),Java类和线路负责(例如GeneralAppliancesBean.java:132
)。
我如何构建这个grep命令?
答案 0 :(得分:1)
shadyabhi@archlinux ~ $ echo '2012-02-31 10:21:41,333 ERROR [65] (GeneralAppliancesBean.java:135) - Exception java.net.ConnectException: Connection timed oot' | cut -d "," -f 1
2012-02-31 10:21:41
shadyabhi@archlinux ~ $ echo '2012-02-31 10:21:41,333 ERROR [65] (GeneralAppliancesBean.java:135) - Exception java.net.ConnectException: Connection timed oot' | cut -d " " -f 5
(GeneralAppliancesBean.java:135)
shadyabhi@archlinux ~
cut
更适合这一点。
如果您的日志位于文件命名日志中,请使用此。
while read myline
do
echo "Date: "$(echo $myline | cut -d "," -f 1)
echo "Error: "$(echo $myline | cut -d " " -f 5)
done < logs
如果错误是多行的(我对此持怀疑态度):
使用grep "ERROR" logs | cut -d "," -f 1
作为日期&amp;课程和行号grep "ERROR" logs | cut -d " " -f 4
。
答案 1 :(得分:1)
grep ERROR java.log|awk '{print $1 $4}'
答案 2 :(得分:0)
您可以定义一个别名同时搜索多个关键字,例如
alias finderrors="grep -i -w 'fatal\|error\|exception\|timeout\|waiting\|fail\|unable\|lock\|block'"
然后这样使用
finderrors mylogfile.log