【发布时间】:2014-11-20 08:59:17
【问题描述】:
我正在尝试用存储在变量中的多行字符串替换文件中的单行。
打印到屏幕时我能够得到正确的结果,但如果我想进行就地替换,则不能。
文件格式:
*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 时相同。
我在 CentOS 上使用 GNU sed 4.1.5 版(通过 Mac 的 ssh 连接到它)。
【问题讨论】:
-
正如我的 [现已删除] 答案中所见,它是关于从 Windows 转换文件。为此,请检查
dos2unix。 -
Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super User 或Unix & Linux Stack Exchange 会是一个更好的提问地点。
-
你试过
"${new_string//\n/\\n}"吗? Sed 需要\n进行替换;文字换行符将开始下一个命令。