Linux « grep логическое И

Добрый день.
Есть лог одной программы
Мне необходимо отслеживать, чтобы а последних 4х строчках лога содержались 3 слова.
START, GO, DEPLOY
Например:

2012-06-20 11.43 LOG другой текст
2012-06-20 12.08 DEPLOY другой текст
2012-06-20 16.33 START другой текст
2012-06-20 19.18 GO другой текст
 
Как отгрепать так, чтобы при отсутствии хотя бы одной строчки выдавался exit код отличный от нуля

1 ответов


Можно объединить последние 4 строки в одну и грепать её:


$ tail -n 4 log_example.log | tr "\\n" ":" | grep -E 'DEPLOY.*START.*GO'
2012-06-20 11.43 LOG другой текст:2012-06-20 12.08 DEPLOY другой текст:2012-06-20 16.33 START другой текст:2012-06-20 19.18 GO другой текст:
 

Приведенный выше пример само собой будет работать только если в тексте слова встречаюся в том же порядке, что и в паттерне. Если порядок слов может от раза к разу быть разным, то можно цепочку грепов сделать


$ tail -n 4 log_example.log | tr "\\n" ":" | grep DEPLOY | grep START | grep GO
2012-06-20 11.43 LOG другой текст:2012-06-20 12.08 DEPLOY другой текст:2012-06-20 16.33 START другой текст:2012-06-20 19.18 GO другой текст:
 

При отсутсвии совпадений grep 1 возвращает


$ tail -n 4 log_example.log | tr "\\n" ":" | grep DEPLOY | grep START | grep GONE
$ echo $?
1