Fala Herbert,
já vi alguns comentários na lista sobre esse pedaço de pg que vc postou e todos me parecem ter razão, isto é, alguém disse que o loop pode ser substituído por um tail (-F|-f|--follow) e aparentemente pode (e deve) mesmo;
Alguém disse que o teu while era desnecessário e pelo trecho de prg que vc postou parece ser mesmo.
Mas supondo que vc saiba o que está fazendo e essa construção seja mesmo necessária vc poderia fazer declarando esse while dentro de uma função que ficaria mais ou menos assim:
declare -f PegaGrep
function PegaGrep
while true
do
grep texto /var/log/kern.log
ip=$(echo "$grep_lines" | tail -n1 | sed_repetido)
hora=$(echo "$grep_lines" | tail -n1 | sed_repetido)
{
echo $ip
echo $hora
} > /dev/tty
[...]
grep_lines=$(PegaGrep)
repare que a saída de sua função seria somente o grep, já que o ip e a hora estão sendo explicitamente desviados para o /dev/tty e como o prg diz que a saída de PegaGrep ira para a variável $grep_lines, seus problemas acabaram.
Mais uma vez insisto: a lógica que vc usou provavelmente não é a melhor, mas espero que esse macete sirva para muitos colegas de lista.