Как я grep для строки, которая происходит перед кодом ошибки, когда число строк до кода ошибки не соответствует - PullRequest
0 голосов
/ 30 сентября 2019

Когда я нахожу строку ошибки в файле журнала, мне нужно знать, что вызвало ошибку. Но имя файла, в котором произошел сбой, - это случайное число строк перед строкой ошибки. Пример:

logfile:

This **specific backup.tar** failed\n 
Because of this\n
Or because of this\n
Then some random lines of output\n  
Exiting -- searched-for string appears\n 

Если бы я использовал 'grep Exiting --before-context = 4', я обнаружил бы, что backup.tar не удалось. Но количество случайных строк варьируется.

Поэтому я хотел бы использовать --before-context = "string", или в этом случае --before-context = " .tar ".

Есть идеи, как это сделать?

1 Ответ

0 голосов
/ 30 сентября 2019

К сожалению, grep не подходит для этой работы. Попробуйте что-то вроде этого в awk:

$ cat foo.txt
This specific backup.tar failed
Because of this
Or because of this
Then some random lines of output
Exiting -- searched-for string appears
$ awk '/This specific .* failed/ { filename = $3 } /searched-for string/ { print filename }' foo.txt
backup.tar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...