我有以下输入,我想编写一个正则表达式,该表达式将与第一条和最后一行匹配。
2019-03-13 00:33:44,846 [INFO] -: foo
2019-03-13 00:33:45,096 [INFO] -: Exception sending email
To:
[foo@bar.com, bar@bar.com]
CC:
[baz@bar.com]
Subject:
some subject
Body:
some
body
2019-03-13 00:33:45,190 [INFO] -: bar
我认为以下内容应起作用,但它与任何内容都不匹配:
pcregrep -M ".+Exception sending email[Ss]+?(?=d{4}(-dd){2})" ~/test.log
用简单的英语我将其描述为:寻找一个异常文本的行,其次是任何角色(包括newlines),直到我们达到一个正面的lookahead。
。由于某种原因,这也包括最后一行,即使它不在Regex101上。我在这里缺少什么?
在很多情况下,我只会在这种情况下使用grep -A
,但问题是身体可能是任何任意数量的线路。
这几乎可以肯定与该工具有关。作为" 8.12版15-17-17-17-17-17-17-17-17-17-17-1月15日"下的PCREGREP状态的变形值:
- 在pcregrep中,当以字面新线序列结尾的模式为 以多行模式匹配,以下行显示为 匹配。这似乎是错误的,所以我更改了它。
一个简单的修复方法是在LookAhead表达式中添加一个newline字符,该字符将其退出比赛并防止最后一行显示:
pcregrep -M ".+Exception sending email[Ss]+?(?=[rn]d{4}(-dd){2})" ~/test.log