Assim:
{ grep foo file.txt; echo END OF OUTPUT; } > output.txt
Isso agrupa comandos sem iniciar um subshell (exceto com o shell Bourne).
Você poderia fazer:
grep foo file.txt | cat - <(echo END OF OUTPUT) > output.txt
(com ksh, bash ou zsh), mas isso cria mais alguns processos e canais extras sem nenhum benefício extra.