Можно ли сделать tail -f
(или подобное) для файла, и grep
это в то же время? Я не против других команд, просто ищущих такое поведение.
shell
command-line
grep
tail
xenoterracide
источник
источник
Это будет работать нормально; в общем,
grep
будет ждать, когда программа не выводит, и продолжит читать, когда поступит вывод, так что если вы делаете:Ничего не произойдет в течение 5 секунд, затем grep выдаст соответствующий «тест», а затем через пять секунд он завершится, когда процесс по конвейеру выполнит
источник
Добавить
--line-buffered
кgrep
, и это может уменьшить задержку для вас. Очень полезно в некоторых случаях.источник
grep
не идет в терминал (перенаправляется в файл другого типа). Строковая буферизация используется по умолчанию, когда вывод поступает на терминал, поэтому в этом нет никакой разницы. Обратите внимание, что эта опция специфична для GNU.Вы можете просто передать вывод
grep
вtail -f
. Существуют также программы, сочетающиеtail -f
функциональность с фильтрацией и раскраской, в частности многозадачность ( примеры ).источник
Я вижу, как все эти люди говорят использовать
tail -f
, но мне не нравятся ограничения этого! Мой любимый метод поиска файла с одновременным отслеживанием новых строк (например, я обычно работаю с файлами журналов, к которым добавляются перенаправленные выходные данные процессов, периодически выполняемых с помощью заданий cron):Это предполагает GNU tail и grep. Вспомогательные подробности из хвостовой man-страницы (GNU coreutils, у меня v8.22) [ https://www.gnu.org/software/coreutils/manual/coreutils.html] :
Таким образом, хвостовая часть моей команды приравнивается к тому
tail --follow --retry --lines=+0
, где последний аргумент указывает на начало в начале, пропуская ноль строк.источник
Используйте выше, я использую это обычно.
источник
Вы можете использовать netcat для получения результатов tail -f, так как новые результаты появляются довольно легко.
Это устанавливает grep для прослушивания результатов ввода, поступающего из порта 1337.
Вторая команда направляет вывод tail -f в netcat и отправляет его localhost 1337. Чтобы сделать это локально, вам нужно переключить ttys для каждого из двух наборов команд. или используйте что-то вроде экрана.
источник
Оно работает. Но позаботьтесь о том, чтобы вывод больше не был мгновенным: он буферизовался через канал.
источник
tail -f
в одном окне, аtail -f logfile | grep pattern
в другом окне. Строки, содержащиеpattern
не всегда появляются в обоих окнах одновременно. Я видел, как линии появляются на расстоянии 30 секунд в редких случаях, что раздражало.tee
или что-то в этом роде.