2014-09-25 182 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的sed在CentOS版本4.1.5(通過SSH在Mac連接到它)

+0

正如我在[現在刪除]的答案所見,它是關於從Windows轉換文件。爲此,請檢查'dos2unix'。 – fedorqui 2014-09-26 07:44:41

+0

Stack Overflow是編程和開發問題的網站。這個問題似乎與題目無關,因爲它不涉及編程或開發。請參閱幫助中心的[我可以詢問哪些主題](http://stackoverflow.com/help/on-topic)。也許[超級用戶](http://superuser.com/)或[Unix&Linux堆棧交換](http://unix.stackexchange.com/)會是一個更好的地方。 – jww 2018-01-15 01:52:58

+0

你試過'「$ {new_string // \ n/\\ n}」'嗎? Sed需要'\ n'替代;一個文字換行符將開始下一個命令。 – 2018-01-15 12:48:29

回答

0

sed可以雙引號的命令字符串,並讓殼做的擴展你,像這樣:

new_string="line number 1\nline number 2\nline number 3" 
sed -i "s/string_to_replace/$new_string/" file