Я отправил это в Superuser, но не получил желающих: https://superuser.com/questions/832578/how-to-grep-a-continuous-stream-with-paging
Я хочу взять файл журнала и отфильтровать некоторые нерелевантные записи журнала, например, на уровне INFO. Приведенный выше ответ о переполнении стека помог мне частично:
$ tail -f php_error_log | grep -v INFO
Следующее, что я хочу, - это иметь подкачку в этом потоке, например, с less. less + F работает с непрерывными потоками, но я не могу применить это к grep. Как я могу этого добиться?
С момента публикации этого вопроса я работал над ним и обнаружил, что less
ожидает появления EOF и зависает, пока не получит его (источник). Это объясняет, почему попытки следовать за трубкой не работают. Я неуклюже взломал короткий скрипт, чтобы делать то, что хочу:
#!/bin/bash
tail -f /data/tmp/test.txt | grep --line-buffered foo > /data/tmp/foo &
pid=$!
echo $pid
sleep 1
less +F /data/tmp/foo
kill $pid
rm /data/tmp/foo
Я убежден, что можно сделать это более элегантно, возможно, с помощью временного файла, который автоматически очищается без прямого взаимодействия.
Как насчет этого:
grep -V INFO php_error_log | less +F
Или вы можете бежать multitail php_error_log
, затем после запуска многоадресной передачи нажмите e
и следуйте инструкциям, чтобы добавить регулярное выражение для фильтрации. Для непрерывного мониторинга одного или нескольких файлов журналов с течением времени хорошим решением является многопользовательская служба.