Что grep выравнивает буферизацию, делают?

Вот моя команда, для которой я использую в сценарии 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
24
задан 16 December 2014 в 23:22

1 ответ

Когда использование нев интерактивном режиме, самые стандартные команды, включает 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 для отключения буфера.

Примечание

42
ответ дан 23 November 2019 в 01:19

Другие вопросы по тегам:

Похожие вопросы: