正则表达式匹配错误和相关的几行
我正在寻找单行正则表达式来匹配日志文件中的“错误”一词,并且我需要获取包含用于调试目的的单词“错误”的行上下的几行。
例如:我需要匹配单词“ TypeError ”,并获取其他几行以上和以下的匹配行。 至少我需要下10行。 任何人都可以请帮忙吗?
日志文件内容在下面=>
TypeError :参数'url'必须是一个字符串,而不是在Url.parse(url.js:107:11)上urlParse(url.js:101:5)在Object.urlResolve [as resolve](url.js: 404:10)在位于/opt/controllers/api/userguide.js:33:17的parseMarkdown(/opt/controllers/api/userguide.js:53:19)处。 (/opt/models/api.js:172:4)在IncomingMessage的/opt/lib/data/api.js:138:5。 (events.js:117:20)IncomingMessage.g(events.js:180:16)上的/opt/node_modules/httpunch/lib/_wrap_request.js:100:9)
试试这个(获得10条前后行) -
(?:(?:.*n){0,10}).*?Error.*(?:(?:n.*){0,10})
演示
编辑
请阅读关于unix环境的评论。
您可以使用与上述相同的正则表达式使用Grep命令。
喜欢这个 -
$ grep -Pzo "(?:(?:.*n){0,10}).*?Error.*(?:(?:n.*){0,10})" <filename>
对于这个答案,所有学分都归Kamehameha所有,这是基于他的正则表达式,但是我继续前进,并且稍微简单一些,随后附上解释。 虽然它不像原来的那么完美,但是工作得很好。
充分的表达
(n.*){0,10}(.*Error:.*)(n.*){0,10}
在regexr上查看
匹配错误行本身
.*Error:.*
这条线其实很简单。 唯一需要知道的是.*
匹配任意数量的字符(但不是换行符)。 所以这一行的意思是“找到任何后面的”错误:“后面是任何事情”
匹配任何行
n.*
这也很容易理解: n(换行符)后跟任何内容。
最多匹配10行
(n.*){0,10}
这将采用“全线”正则表达式并尽可能多地应用0到10次(因为默认情况下正则表达式是贪婪的)。
把它放在一起
我们想要的是“10条线+错误线+ 10条线”,所以我们只是采取我们之前所做的并将其放入一个大的声明。
(n.*){0,10}(.*Error:.*)(n.*){0,10}
链接地址: http://www.djcxy.com/p/19639.html
上一篇: Regular expression to match error and associated few lines