我正在尝试使用grep
命令从日志文件中获取日志,日志文件的格式如下:
[1/10/16 23:55:33:018 PST] 00000057 ServerObj E SECJ0373E: Exception message
at com.own.ws.wim.util.UniqueNameHelper.formatUniqueName(UniqueNameHelper.java:102)
at com.own.ws.wim.ProfileManager.getImpl(ProfileManager.java:1569)
到目前为止,我能够获取日志,但我也想要堆栈跟踪。
grep -i '^[[:space:]]*at' --before-context=2 SystemOut.log | grep "1/13/16 7:[1-60]"
output : [1/10/16 23:55:33:018 PST] 00000057 ServerObj E SECJ0373E: Exception message
知道如何实现这一点吗?
答案1
带有字段分隔符“at”的 awk 也可以工作。 “^[”匹配以日期戳开头的行,$1 是第一个字段。
awk -F"at" '/^\[/{print $1}' test
根据您的评论,如果我正确理解您的需要,awk 命令应该包含您正在查找的行,并且 grep 范围在 7 点到 8 点之间。
但是,听起来您需要两个列表。为此,您可以在日志文件上运行 awk 命令并将其输出到另一个文件。然后您可以 awk/grep 第二个文件。
awk -F"at" '/^\[/{print $1}' test>> ExtractedLogs.txt
awk -F"at" '$1 ~ "07:"{print $1}' ExtractedLogs.txt>> StackTraceOnly.txt
答案2
您可以添加 --after-context=2,在找到“at”行后将其他行添加回来:
grep -i '^[[:space:]]*at' --before-context=2 afile | grep --after-context=2 "1/13/16 7:[1-60]"