Как найти строку, которая появляется перед кодом ошибки, если количество строк до кода ошибки не соответствует

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

журнальный файл:

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".

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


person suzlitz    schedule 30.09.2019    source источник
comment
Рассматривали ли вы возможность использования awk вместо grep ?   -  person Abra    schedule 30.09.2019


Ответы (1)


К сожалению, 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
person Jon    schedule 30.09.2019
comment
Почти. Я знаю имя файла, в котором может быть ошибка. Если он существует в этом файле журнала, посмотрите назад, чтобы найти, какая резервная копия не удалась. Возможно: grep «Выходной» файл журнала, если он существует, найдите «/failed/» в файле журнала. Спасибо за предложение! - person suzlitz; 30.09.2019