Я пытаюсь заменить одну строку в файле многострочной строкой, хранящейся в переменной. Я могу получить правильный результат при печати на экран, но не если я хочу сделать замену на месте.sed заменить строку на многострочную переменную
Файл имеет вид:
*some code*
*some code*
string_to_replace
*some code*
Я хочу, чтобы результирующий файл будет:
*some code*
*some code*
line number 1
line number 2
line number 3
*some code*
Код я попытался было:
new_string="line number 1\nline number 2\nline number 3"
# Correct output on screen
sed -e s/"string_to_replace"/"${new_string}"/g $file
# Single-line output in file: "line number 1line number 2line number 3"
sed -i s/"string_to_replace"/"${new_string}"/g $file
При попытке объединить -i и -e, результат будет таким же, как при использовании только -i. Может ли кто-нибудь помочь мне решить эту проблему?
Я использую GNU СЭД версии 4.1.5 на CentOS (подключенный к нему через SSH с Mac)
Как видно из моего [теперь удаленного] ответа, речь шла о преобразовании файла из Windows. Для этого проверьте «dos2unix». – fedorqui
Stack Overflow - это сайт для вопросов программирования и развития. Этот вопрос кажется вне темы, потому что речь идет не о программировании или разработке. См. [Какие темы можно задать здесь] (http://stackoverflow.com/help/on-topic) в Справочном центре. Возможно, лучше сказать [Суперпользователь] (http://superuser.com/) или [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/). – jww
Вы пробовали '' $ {new_string // \ n/\\ n} "'? Для замены Sed требуется '\ n'; буквальная новая строка начнет следующую команду. –