Если вы используете GNU или busybox
, sed
, вы сможете выполнить
sed -i "1i $header_line" "/tmp/$file_title"
Проблема, с которой вы столкнулись экранирование $
из оболочки, чтобы она не распознавала $header_line
как переменную.
С NetBSD или OpenBSD sed
(также с FreeBSD и macOS, но вам нужен пробел между -i
и ''
):
sed -i'' "1i\\
$header_line
" "/tmp/$file_title"
BSD sed
, как и в традиционных реализациях sed
, и как указано в POSIX, требует \
и символ новой строки после команды i
, и поскольку мы заключаем двойные кавычки, нам нужно экранировать \
из оболочки.
Альтернативой может быть использование cat
:
printf '%s\n' "$header_line" | cat - "/tmp/$file_title" >new_file && mv new_file "/tmp/$file_title"
Это также позволяет обойти проблемы с обратной косой чертой в значении $header_line
, упомянутые Стефаном Шазеласом в комментариях ниже.