Use stdbuf (de coreutils ) e tr :
$ while true; do printf "ASDF$ while true; do printf "ASDF$ while true; do printf "ASDF$ while true; do printf "ASDF%pre%1"; sleep 0.5; done | awk 'BEGIN{RS="%pre%1"}; {printf "%s ", $0}'
ASDF ASDF ASDF ASDF ASDF ...
1"; sleep 0.5; done | stdbuf -o0 tr '%pre%1' ' '
ASDF ASDF ASDF ASDF ASDF ...
1"; sleep 0.5; done | awk 'BEGIN{RS="%pre%1"}; {printf "%s ", $0}'
ASDF ASDF ASDF ASDF ASDF ...
1"; sleep 0.5; done | stdbuf -o0 tr '%pre%1' ' '
ASDF ASDF ASDF ASDF ASDF ...
Observação: stdbuf não é necessário ao substituir por uma nova linha, ou seja, tr '%code%1' '\n'
Ou use awk / gawk
%pre%
Isso funciona independentemente do terminal. Consulte O que é o armazenamento em buffer ... para obter mais informações.