Использование sed
и оболочки, которая знает о "здесь -строки":
$ sed '/begin/r/dev/stdin' file <<<"$variable"
mixture
Molefraction
begin
rn=45
fg=12
cd=6
END_OF_FILE
Это ищет строку begin
в file
, и когда она соответствует, вставляется все, что находится на стандартном вводе. Мы передаем значение $variable
на стандартный ввод через строку -.
Для других оболочек строка здесь -тривиально заменяется на printf
над конвейером:
$ printf '%s\n' "$variable" | sed '/begin/r/dev/stdin' file
mixture
Molefraction
begin
rn=45
fg=12
cd=6
END_OF_FILE
Чтобы сохранить это в новый файл, используйте перенаправление в конце. Если ваш sed
поддерживает редактирование места в -с помощью sed -i
, это можно использовать для изменения исходного файла (, рекомендуется протестировать это на копии файла; и запуск его несколько раз добавит данные в файл несколько раз ).
Чтобы получить правильный отступ, например,.bash
:
$ ( set -f; IFS=$'\n'; printf ' %s\n' $variable ) | sed '/begin/r/dev/stdin' file
mixture
Molefraction
begin
rn=45
fg=12
cd=6
END_OF_FILE
Здесь мы полагаемся на разбиение слов оболочки для форматирования значения переменной. Мы используем set -f
, чтобы убедиться, что не происходит подстановки имен файлов, затем мы устанавливаем $IFS
на новую строку,и пусть оболочка разделит значение переменной на слова с разделителями новой строки -. printf
немного изменен, чтобы вставить два пробела перед каждым словом.