Эта задача слишком сложна для grep
, но можно использовать sed
, например:
sed '/Trn-status:/h;/\\"message\\":\\"TECHNICAL EXCEPTION\\"/!d;G;/Trn-status: INCOMPLETE/!d;s/.*"errorCode\\":\\"//;s/\\".*//' yourfile
/Trn-status:/h
чтобы всегда сохранять последнюю Trn-status
строку в ячейке хранения /\\"message\\":\\"TECHNICAL EXCEPTION\\"/!d
означает d
удаление всех строк без(!
)заданного шаблона. Обратите внимание, что обратную косую черту необходимо экранировать другой обратной косой чертой TECHNICAL EXCEPTION
сообщений, но теперь нам нужно убедиться, что Trn-status
равно INCOMPLETE
, поэтому мы добавляем пробел с G
и delete
, если мы не не найтиTrn-status: INCOMPLETE
s/.*"errorCode\\":\\"//
)и после(s/\\".*//
)кода, который вы ищете.