Existem dois problemas com isso:
sed -i '1i $text' $f
Primeiro, a variável não é expandida entre aspas simples, por isso sed
vê a string literal 1i $text
.
O segundo problema é que o comando i
espera uma barra invertida e a linha a ser adicionada em uma segunda linha, então é necessário fazer algo assim:
$ text="blah"
$ sed -i $'1i\\n'"$text"$'\n' "$file"
(em shells com a expansão $'...'
ou com novas linhas literais em shells que não suportam isso.)
Além disso, o comando i
só pode adicionar uma linha, as linhas a seguir seriam tomadas como comandos sed adicionais.
Embora se você tiver o GNU sed, apenas sed -i "1i $text" "$f"
deve funcionar. Mas você ainda recebe apenas uma linha.
Para várias linhas, provavelmente é melhor algo parecido com o que o @mjturner mostrou em sua resposta.