2014-09-25 6 views
1

Я пытаюсь заменить одну строку в файле многострочной строкой, хранящейся в переменной. Я могу получить правильный результат при печати на экран, но не если я хочу сделать замену на месте.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)

+0

Как видно из моего [теперь удаленного] ответа, речь шла о преобразовании файла из Windows. Для этого проверьте «dos2unix». – fedorqui

+0

Stack Overflow - это сайт для вопросов программирования и развития. Этот вопрос кажется вне темы, потому что речь идет не о программировании или разработке. См. [Какие темы можно задать здесь] (http://stackoverflow.com/help/on-topic) в Справочном центре. Возможно, лучше сказать [Суперпользователь] (http://superuser.com/) или [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/). – jww

+0

Вы пробовали '' $ {new_string // \ n/\\ n} "'? Для замены Sed требуется '\ n'; буквальная новая строка начнет следующую команду. –

ответ

0

В sed вы можете удвоить процитировать командную строку и пусть оболочка сделать расширение для вас, как это :

new_string="line number 1\nline number 2\nline number 3" 
sed -i "s/string_to_replace/$new_string/" file 
Смежные вопросы