Я хочу напечатать строки, содержащие Result: False
и три строки над ним, кроме случаев, когда одна из трех строк содержит service.dead
.
Так для следующего файла:
ID: service1
Function: module.run
Name: ps.kill_pid
Result: True
Comment: State was not run because onfail req did not change
Started: 16:37:23.237741
Duration: 0.0 ms
ID: service2
Function: service.dead
Name: SomeService
Result: False
Comment: check_cmd determined the state failed
Started: 16:37:23.567741
Duration: 8286.0 ms
ID: service3
Function: service.running
Name: SomeService
Result: True
Comment: Started Service SomeService
Delayed return for 5 seconds
Started: 16:38:22.956741
Duration: 47438.0 ms
ID: check_status
Function: cmd.run
Name: http.query http://1.1.1.1
Result: False
Comment: Attempt 1: Returned a result of "False"
Attempt 2: Returned a result of "False"
Command "http.query http://1.1.1.1"
Started: 16:40:57.424741
Duration: 50180.0 ms
Я хочу напечатать только
ID: check_status
Function: cmd.run
Name: http.query http://1.1.1.1
Result: False
Мне удалось напечатать три строки выше Result: False
и удалить две строки ниже service.dead
с помощью следующей команды:
grep -B 3 'Result: False' /my/file | sed '/service.dead/,+2d'
Но я могуне можете найти, как удалить строку выше service.dead
.Мой текущий вывод:
ID: Service2
---
ID: check_status
Function: cmd.run
Name: http.query http://1.1.1.1
Result: False
Какой-нибудь элегантный способ сделать это?