>>400
変数strを使う場合はどうですか?
sed '/hoge/a $str' -i file だとstrの中身が返らないし
sed "/hoge/a $str" -i file だとエラーになるんですよね。
結局strの中身の特殊文字をうまくエスケープしておかないと駄目みたいで、面倒だなぁと前から思ってまして。

別にsedに拘っているわけではないです。とりあえず今はこんなふうにして凌いでいます。

cat > file2 <(sed -n "1,/hoge/ p" file) <(cat << EOF
文字列1
文字列2
・・・
文字列n
EOF
) <( sed -n "/hoge/,$ p" file | tail -n +2 ) ; mv file2 file

いまいちカッコ悪くて気に入りません。
それに file が巨大な場合は2回sedをかますのは非効率的だろうし。。。

この手の挿入処理はよくあるテクだと思うので、他にもっと良い方法があるんだろうと思ってたのですが。