Я должен заменить большой блок текста (код сценария оболочки) в файле другим блоком текста.
Я впечатлен, как я могу использовать sed для замены многострочной строки? ответили antak и Multi-line заменить ответили Брюс Эдигер
Но у меня есть некоторые проблемы с их использованием.
Antak уже упоминал в своем ответе, что потоковая передача всего file (
1h;2,$H;$!d;g;
) в буфер не рекомендуется для больших файлов, потому что это перегружает память.Я знаю,
sed
может использоваться с функцией блока, чтобы сохранить текст вне блока без изменений. Я хочу использовать эту функцию. Но если я использую,sed -i '/marker1/,/marker2/s/.*/new text (code)/' filename
он будет вставлять новый текст (код) повторно для каждого потока. Следовательно, я должен сделать визуальный блок одним потоком, используя что-то похожее на то, что предлагал ранее Antak , но для блока (не для всего файла).
Как упоминал Брюс Эдигер, можно добавить функцию добавления,
ex
начинающуюся сa
конца.
(точка), но мой новый текст (код) содержит строки, начинающиеся с точки, что можно рассматривать как синтаксис точки добавления. Как я могу использовать это в этой ситуации?ex
'sdd
' количество строк 'может удалить несколько строк, но если у меня есть блок между / marker1 / и / marker2 / с количеством строк не фиксированным (изменяющимся), должен быть заменен новым текстом (кодом), как это сделать Это ?
sed
или ex
команда).
r
команду чтения файла, чтобы скопировать текст из другого файла, если исходный текст для замены находится в файле.