Как использовать хвост в сочетании с sed.

Я хочу подать звуковой сигнал, если в файлах журналов есть исключение.

Я использую bash script.

Но, к сожалению, когда хвост используется в combintaion с sed, он не работает.

Я попробовал следующие команды и разместил здесь.

tail -f mylogs.log | grep "Exception" | sed -e $'s/Exception/Exception\a/'



tail -f mylogs.log  | sed -e $'s/Exception/Exception\a/'



tail -f mylogs.log  | grep "Exception" | sed -e $'s/Exception/Exception\a/'

Ответы

Ответ 1

Проблема заключается в том, что grep видит, что он не записывается на терминал, поэтому он буферизует свой вывод, в конце концов записывая большие куски, которые sed может обрабатывать все сразу. Чтобы сообщить, распечатывать ли строки, как только они доступны, используйте параметр --line-buffered:

tail -f mylogs.log \
  | grep --line-buffered Exception \
  | sed -u -e $'s/Exception/Exception\a/'

(Обратите внимание, что я также добавил флаг -u в sed, который похож на параметр grep --line-buffered. В моем тестировании это, похоже, не повлияло на эту команду, но Я полагаю, что лучше включить его на всякий случай.)