Bash,sed:用多行文件内容替换模式

时间:2011-03-18 11:31:35

标签: bash sed

如果我的文件名为some_file,内容如下:

first line 
second line 
third line

和内部脚本:

VAR1="first line\nsecond line\nthird line"
VAR2="`cat some_file`"

我希望VAR1和VAR2相同,但根据sed显然并非如此:

sed "s/^a/${VAR1}/" some_another_file # this is OK
sed "s/^a/${VAR2}/" some_another_file # this fail with syntactic error

我认为换行表示在某种程度上是不同的,但我找不到任何方法如何使VAR2等于VAR1。

提前致谢

2 个答案:

答案 0 :(得分:4)

这将读入文件并用其内容替换该行:

sed -e '/^a/{r some_file' -e 'd}' some_another_file 

答案 1 :(得分:2)

将VAR1更改为:

VAR1=$(echo -e "first line\nsecond line\nthird line")

然后测试它们:

$ [ "$VAR1" == "$VAR2" ] && echo equal
equal

更新

要使sed工作,请更改VAR2,使其具有“\ n”而不是换行符。

VAR2=$(sed ':a;N;$!ba;s/\n/\\n/g' some_file)
sed "s/^a/${VAR2}/" file