Bash Script - хвост к файлу - PullRequest
       3

Bash Script - хвост к файлу

0 голосов
/ 17 октября 2019

У меня есть следующее в файле сценария bash watcher.sh.

grep ERROR $ExampleLogFile > $ErrorLogFile

Когда я запустил это, он скопировал строки из ExampleLogFile в ErrorLogFile, которые успешно содержат ERROR.

Мне нужно сделать так, чтобы он постоянно следил за изменениями в ExampleLogFile и записывал их в ErrorLogFile.

Я думал о следующем, но это не работает:

tail -f grep ERROR $ExampleLogFile > $ErrorLogFile

Он пишет некоторые строки, но не те, которые содержат ERROR.

tail: grep: No such file or directory
tail: ERROR: No such file or directory

Любой совет, пожалуйста.

Ответы [ 4 ]

1 голос
/ 17 октября 2019

Вам нужно:

while :; do grep ERROR $ExampleLogFile > $ErrorLogFile; sleep 2; done

Это должно достичь того, что вы хотите, без необходимости использования команды tail.

Если файл когда-либо будет очищен, хотя это не будет работать так, как вы могли ожидать, потому чтоgrep будет извлекать только текущие записи в $ ErrorLogFile.

1 голос
/ 17 октября 2019

Здесь можно использовать команду tee.

tail -f $ExampleLogFile | grep --line-buffered  ERROR | tee $ErrorLogFile

Она будет одновременно сохраняться и печататься на стандартный вывод.

enter image description here

0 голосов
/ 17 октября 2019
tail -f $ExampleLogFile | grep --line-buffered ERROR > $ErrorLogFile

или параноик:

stdbuf -oL tail -f $ExampleLogFile | stdbuf -oL grep --line-buffered ERROR > $ErrorLogFile

Но, скорее всего, вы хотите включить и существующие строки. В этом случае:

tail -n +1 -f $ExampleLogFile | grep --line-buffered ERROR > $ErrorLogFile
0 голосов
/ 17 октября 2019

Вы можете расположить хвост / grep в трубе

tail -f $ExampleLogFile | grep ERROR  > $ErrorLogFile

Помните, что эта команда никогда не завершится сама (хвост будет продолжать искать дополнительные данные). Вам нужно будет согласовать некоторые другие условия выхода (например, тайм-аут, явное уничтожение и т. Д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...