grep
está armazenando em buffer (porque determina que sua saída não é terminal; a rigor, esse é o comportamento da biblioteca C).
Para desabilitar isso, execute-o com unbuffer -p
(o -p
é necessário para que unbuffer
leia sua entrada padrão):
ping localhost | unbuffer -p grep localhost | cat
ou diga grep
ao buffer por linha (se ele suportar isso):
ping localhost | grep --line-buffered localhost | cat