使用sed替换具有空格和换行符的字符串模式

时间:2017-01-01 15:01:44

标签: unix sed

下面我正在设置从文件读取的变量:

$ replace=$(cat file.txt)

我正在尝试使用sed,如下所示

$ sed -i 's|old|'$replace'|g'

但是,我收到以下错误:

sed: -e expression #1, char 7: unterminated `s' command

注意 - 在我的情况下,替换字符串是从具有空格和换行符的文件中读取的,如下所示。

file.txt的

line 1
line 2

可以处理有新行的模式吗?

1 个答案:

答案 0 :(得分:0)

有可能吗?可能虽然可能有一些不可移植的GNU扩展,但它不是sed是什么(单个行上的简单替换)所以不要用sed做,只需使用awk:

awk 'NR==FNR{new = new $0 ORS; next} {sub(/old/,new)}1' file.txt targetFile

请注意,您不需要使用cat的shell变量来执行此操作,但如果您愿意,可以使用它:

replace=$(cat file.txt)
awk -v new="$replace" '{sub(/old/,new)}1' targetFile
相关问题