Простое использование tail & grep. Несколько условий

извините за мое невежество, я довольно новичок в этом.

Я пытаюсь прочитать файл журнала, который записывается простым демоном. Что я хочу сделать, это фильтр "прямой" выход на некоторые - несколько "типов".

мои типы: DEBUG|INFO|WARN|ERROR|FATAL

это то, что у меня есть до сих пор, и это работает для 1 случая, я не могу заставить его работать для нескольких случаев, хотя.

tail -f log.txt | grep INFO

Я пробовал пару вещей, чтобы попытаться сказать, что я хочу"WARN's & ERROR 's" но ничего действительно работает для меня. Как я могу это исправить?

спасибо

5
задан Mike
источник

3 ответов

try

tail -f log.txt | egrep 'WARN|ERROR'
14
отвечен Doug Harris 2009-10-23 15:11:37
источник

в дополнение к переключению на egrep/grep -E чтобы получить оператор чередования расширенных регулярных выражений, вы можете также использовать несколько -e аргументы к регулярному grep или даже fgrep/grep -F

на самом деле, если все ваши поиски являются статическими строками (например, исходный вопрос), вы можете даже "понизить" до fgrep/grep -F , который может дать прирост скорости (так как он всегда делает прямые сравнения строк без регулярное выражение.)

fgrep -e DEBUG -e INFO -e WARN -e ERROR -e FATAL

также POSIX позволяет разделять шаблоны символами новой строки.

# bash-ish to put a newlines into the string
fgrep $'DEBUG\nINFO\nWARN\nERROR\nFATAL'

# Standard syntax, but easier to break while editing(?):
fgrep "$(for f in DEBUG INFO WARN ERROR FATAL; do echo "$f"; done)"
2
отвечен Chris Johnsen 2009-10-23 20:19:33
источник

это тоже работает (regular grep и экранировать символ трубы):

tail -f log.txt | grep 'WARN\|ERROR'
0
отвечен Dennis Williamson 2009-10-23 18:37:02
источник

Другие вопросы bash cygwin grep logging