Provavelmente é um problema de buffer. Veja este post do SO sobre a desativação do buffer automático ao usar tubos . Você pode usar o unbuffercomando em expect:
$ unbuffer tail -f log.txt | egrep 'WARN|ERROR' | tee filtered_output.txt
Edit : Como você tem um pipeline mais longo, provavelmente precisará descomprimir cada comando (exceto o último):
$ unbuffer tail -f log.txt | unbuffer egrep 'WARN|ERROR' | tee filtered_output.txt
Edição 2 : unbufferestá disponível no Cygwin a partir do expectpacote fonte (por exemplo, expect-20030128-1-src.tar.bz2 , encontrado na expect/examplespasta), mas é um script muito curto. Se você já possui o expectpacote, basta colocar isso em um script chamado unbufferem seu /usr/local/bindiretório:
#!/usr/bin/expect --
# Description: unbuffer stdout of a program
# Author: Don Libes, NIST
eval spawn -noecho $argv
set timeout -1
expect
No Debian, o unbuffercomando é fornecido no expect-devpacote e é instalado como expect_unbuffer.