用于匹配错误和关联几行的正则表达式
Regular expression to match error and associated few lines
我正在寻找一个单行正则表达式来匹配日志文件中的单词"错误",我需要获取具有单词"Error"的行上方和下方的几行以进行调试。
例如: 我需要匹配单词"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)
试试这个(最多获取 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}
在正则表达式上查看
匹配误差线本身
.*Error:.*
这条线其实很简单。您唯一需要知道的是.*
匹配任意数量的字符(但不是换行符)。所以这一行的意思是"查找任何内容,后跟"错误:",后跟任何内容"
匹配任何行
'n.*
这也很容易理解:'(换行符)后跟任何内容。
最多匹配 10 行
('n.*){0,10}
这采用"全行"正则表达式并在 0 到 10 次之间应用它,尽可能多(因为正则表达式默认是贪婪的)。
将一切整合在一起
我们想要的是"10 行 + 错误线 + 10 行",所以我们只是把我们之前所做的,放在一个大的陈述中。
('n.*){0,10}(.*Error:.*)('n.*){0,10}
相关文章:
- 如何在正则表达式中匹配空格、换行符
- 用于匹配错误和关联几行的正则表达式
- 如何使用正则表达式 JavaScript 替换具有特定单词的整行
- 正则表达式每行只匹配第一个字符串
- Javascript正则表达式匹配行的开头*而非*
- javascript正则表达式,将多个实例替换为多行字符串中的单个实例
- 使用正则表达式删除段落开头和结尾的换行符
- JMeter-正则表达式提取器-多行html
- 正则表达式在换行符 前面有两个空格
- 正则表达式 - 字符串不能以空格开头,以空格结尾,并且连续包含几个空格
- 正则表达式与 Node .js 代码行不匹配
- 在正则表达式中指定新行数的最佳实践
- javascript 正则表达式中回车符、换行符和多个空格的匹配
- 要在多行中获取的正则表达式
- 使用正则表达式提取句子中的最后几个单词
- 正则表达式:检索字符串第一次出现之前的行
- 正则表达式在多行上匹配
- ACE 编辑器多行正则表达式
- 咖啡脚本多行正则表达式取代了混乱
- 用几行写的JavaScript正则表达式