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.