Pochwal się co zrobiłeś z tym sedem. Nie rozumiem czemu nie możesz użyć w sedzie zmiennej.
Generalnie pliku "w miejscu" nie można zedytować. Albo musisz zapisać nową zawartość w pamięci i na koniec wypluć do tego samego pliku zastępując jego zawartość, albo (jeśli operujesz na dużej ilości danych, które niebezpiecznie zapchałyby pamięć) użyć pliku tymczasowego a potem nadpisać nim plik docelowy.
Z użyciem sed:
#!/bin/sh
file="plik.txt"
line="dodaj mnie"
n=3
sed "${n}a${line}" "$file" > "${file}.tmp"
mv -f "${file}.tmp" "${file}"
Albo, jeśli używasz seda z GNU, jest tam opcja -i czyli --in-place:
#!/bin/sh
file="plik.txt"
line="dodaj mnie"
n=3
sed -i "${n}a${line}" "$file"
Możesz też użyć head i tail:
#!/bin/sh
file="plik.txt"
line="dodaj mnie"
n=3
head -n $n "${file}" > "${file}.tmp"
echo "$line" >> "${file}.tmp"
n=$(($n+1))
tail -n +$n "${file}" >> "${file}.tmp"
mv -f "${file}.tmp" "${file}"
Albo head i tail w pamięci:
#!/bin/sh
file="plik.txt"
line="dodaj mnie"
n=3
C=`head -n $n "${file}"`
C="${C}\\n${line}"
n=$(($n+1))
C="${C}\\n$(tail -n +$n ${file})"
echo "$C" > "${file}"