I can't use grep on all of the input since it's a stream. I can accumulate a chunk of stream and use grep on it...
Вы в курсе, что трубопроводы блокируются? Если вы передаете что-то в grep, а все входные данные недоступны, grep будет ждать, пока они не будут доступны, а затем продолжит работу, как если бы входные данные были там все время.
$ ( echo a1; echo b1; sleep 5; echo a2 ) | grep 'a.'
a1
a2
РЕДАКТИРОВАТЬ :Как работают конвейеры, например, с cmd1 | cmd2
, обе программы запускаются одновременно, например, с. 65 536 -байт «буфера фрагментов» между ними. Когда cmd2
пытается прочитать, а этот буфер пуст, он будет ждать, пока фрагмент станет доступным. Когда cmd1
пытается записать и этот буфер заполнен, он будет ждать, пока cmd2
не прочитает его.
Из того, что я могу прочитать, нет необходимости разбивать входные данные на куски и передавать их в grep отдельно. Это уже сделано автоматически.
EDIT2:grep
также должен печатать результаты, как только находит их в потоке. Нет необходимости, чтобы поток заканчивался, прежде чем вы сможете получить свои результаты.