6

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

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

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

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

tail -f log.txt | grep INFO

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

Спасибо

3 ответа3

15

пытаться

tail -f log.txt | egrep 'WARN|ERROR'
2

Помимо переключения на 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)"
0

Это также работает (обычный grep и экранирующий символ):

tail -f log.txt | grep 'WARN\|ERROR'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .