我在日志文件中有这样的错误:
[11:16:16 31/10] 2428 ERROR: Wide character in subroutine entry at /home/site/site/app/lib/SC/Contro
ller/Client/Sites.pm line 1584.
Stack:
[/xxx:1584]
[/xxx:70]
[/xxx:133]
我想将此错误放在某些文件中:
cat apache.error.log | grep "query NS" > apache.error.log-NS
但是我怎么能为多行日志消息做到这一点?
答案 0 :(得分:1)
我找到了这个解决方案:
cat apache.error.log | grep -Pzo '^.*?Wide character.*?\nStack.*?(\n(?=\s).*?)*$'
(\n(?=\s).*?)*
表示:
(...)*
多次查找\n
下一行(?=\s)
以空白字符开头.*?
直到该行的结尾(在整个正则表达式中注意$
个字符)答案 1 :(得分:0)
没有冒犯,但我认为@Eugen的解决方案过于通用,因为这是一个日志文件,可能,reg ex也匹配不需要的行。 所以,确保我们获取确切的行,这是我认为应该是reg ex。随意评论!
^\[\d{2}\:\d{2}\:\d{2}\s\d{2}\/\d{2}\]\s\d+\sERROR\:\sWide\scharacter\sin\ssubroutine\sentry\sat\s[a-zA-Z\/\.]+\s.*?\nStack.*?(\n(?=\s).*?)*$