Сопоставление с образцом не работает с cp?

Использование 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немного изменен, чтобы вставить два пробела перед каждым словом.

-1
02.10.2021, 17:14
0 ответов

Теги

Похожие вопросы