У меня есть следующие данные, и я хотел бы написать регулярное выражение, которое будет соответствовать каждой строке, кроме первой и последней.
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[\S\s]+?(?=\d{4}(-\d\d){2})" ~/test.log
В простом английском я бы описал это следующим образом: ищите строку с текстом исключения, за которым без жадности следует любой символ (включая символы новой строки), пока мы не встретим положительный прогноз на дату.
По некоторым причинам это также включает в себя последнюю строку, хотя это не относится к regex101 . Что мне здесь не хватает?
Во многих случаях я бы просто использовал grep -A
в таком случае, но проблема в том, что телом может быть любое произвольное число строк.