Se você está usando o GNU ou busybox , sed , então você deve ser capaz de fazer
sed -i "1i $header_line" "/tmp/$file_title"
O problema que você teve foi o de escapar do $ do shell para que ele não reconhecesse $header_line como uma variável.
Com NetBSD ou OpenBSD sed (também com FreeBSD e macOS, mas você precisa de um espaço entre -i e '' ):
sed -i'' "1i\
$header_line
" "/tmp/$file_title"
BSD sed , como implementações tradicionais de sed , e conforme especificado por POSIX, requer \ e uma nova linha literal após o comando i , e como estamos duplicando aspas, precisamos escapar do \ do shell.
Uma alternativa seria usar cat :
printf '%s\n' "$header_line" | cat - "/tmp/$file_title" >new_file && mv new_file "/tmp/$file_title"
Isso também ignora problemas com barras invertidas no valor de $header_line mencionado por Stéphane Chazelas nos comentários abaixo.