Использование sed и bash
Поскольку вы используете bash, попробуйте:
sed -i "s~%text%~${text//$'\n'/\\n}~g" t.txt
${text//$'\n'/\\n}
является примером замены шаблона в bash .
В этом случае он заменяет все символы новой строки на обратную косую черту, за которой следует n
, которую sed
будет интерпретировать как новую строку.
Пример
Рассмотрим эту text
переменную:
$ echo "$text"
line 2
line 1
line 3
line 4
И этот входной файл:
$ cat t.txt
start
%text%
end
Теперь запустите нашу команду:
$ sed "s~%text%~${text//$'\n'/\\n}~g" t.txt
start
line 2
line 1
line 3
line 4
end
Чтобы изменить файл на месте, конечно, добавьте обратно -i
.
Использование awk
С такой же переменной text
и файлом t.txt
, как указано выше:
$ awk -v new="$text" '{gsub(/%text%/, new)} 1' t.txt
start
line 2
line 1
line 3
line 4
end