我正在寻找单行正则表达式来匹配单词"错误"从日志文件中我需要获得上面和下面几行的单词"错误"用于调试目的。
例如: 我需要匹配单词" TypeError "并在这些匹配的行的上方和下方获得其他几行。至少我需要接下来10行。有人可以帮忙吗?
以下日志文件内容=>
**TypeError**: Parameter 'url' must be a string, not undefined
at Url.parse (url.js:107:11)
at urlParse (url.js:101:5)
at Object.urlResolve [as resolve] (url.js:404:10)
at parseMarkdown (/opt/controllers/api/userguide.js:53:19)
at /opt/controllers/api/userguide.js:33:17
at Object.<anonymous> (/opt/models/api.js:172:4)
at /opt/lib/data/api.js:138:5
at IncomingMessage.<anonymous> (/opt/node_modules/httpunch/lib/_wrap_request.js:100:9)
at IncomingMessage.g (events.js:180:16)
at IncomingMessage.emit (events.js:117:20)
答案 0 :(得分:1)
试试这个(获取前10行和后续行) -
(?:(?:.*\n){0,10}).*?Error.*(?:(?:\n.*){0,10})
编辑
只需阅读有关unix环境的评论。
您可以使用与上面相同的正则表达式使用Grep命令。
像这样 -
$ grep -Pzo "(?:(?:.*\n){0,10}).*?Error.*(?:(?:\n.*){0,10})" <filename>
答案 1 :(得分:0)
所有归功于Kamehameha的答案,它基于他的正则表达式,但我继续前进并使其更简单地跟随附带的解释。虽然它不如原版完美,但效果很好。
(\n.*){0,10}(.*Error:.*)(\n.*){0,10}
.*Error:.*
这条线实际上非常简单。您唯一需要知道的是.*
匹配任意数量的字符(但不是换行符)。所以这一行意味着&#34;找到任何后跟&#34;错误:&#34;随后是任何事情&#34;
\n.*
这也很容易理解:\ n(换行符)后跟任何内容。
(\n.*){0,10}
这需要&#34;全线&#34;正则表达式并尽可能多地应用0到10次(因为默认情况下正则表达式是贪婪的)。
我们想要的是&#34; 10行+错误行+10行&#34;,所以我们只是采取我们之前制作的内容并将其放入一个大的陈述中。
(\n.*){0,10}(.*Error:.*)(\n.*){0,10}