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 код отличный от нуля
Есть лог одной программы
Мне необходимо отслеживать, чтобы а последних 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 другой текст
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