Вот моя команда, для которой я использую в сценарии grep
данные реального времени. Это, кажется, не вытягивает данные реального времени правильно, поскольку это просто пропускает некоторые строки.
tail -f <file> | fgrep "string" | sed 's/stuff//g' >> output.txt
Что сделала бы следующая команда? Что "буферизует строка"?
tail -f <file> | fgrep --line-buffered "string" | sed 's/stuff//g' >> output.txt
Когда использование нев интерактивном режиме, самые стандартные команды, включает grep
, буферизует вывод, означая, что это сразу не пишет данные в stdout
. Это собирается, большой объем данных (зависьте от ОС, в Linux, часто 4 096 байтов) перед записью.
В Вашей команде, grep
вывод передается по каналу к stdin
из sed
команда, таким образом grep
буферизуют ее вывод.
Так, --line-buffered
опция, вызывающая grep
буфер строки использования, означая запись вывода каждый раз, это видело новую строку, вместо того, чтобы ожидать для достижения 4 096 байтов по умолчанию. Но в этом случае, Вы не нуждаетесь grep
вообще, просто используете tail
+ sed
:
tail -f <file> | sed '/string/s/stuff//g' >> output.txt
команда With, которая не имеет опции изменить буфер, можно использовать GNU coreutils stdbuf
tail -f <file> | stdbuf -oL fgrep "string" | sed 's/stuff//g' >> output.txt
для включения буферизации строки или использования -o0
для отключения буфера.
Примечание