如何在使用sed的字符串替换时添加文字换行符?

时间:2013-11-27 16:49:48

标签: regex bash replace sed newline

让我解释一下我面临的情况:我有一个perl文件,其中包括创建另一个进程使用的“标题”字符串。这在perl脚本(script.pl)中定义为:

$str = "START\n" .
"PARAM1=blah\n" .
"PARAM2=blah2\n" .
"PARAM3=blah3\n";

我需要通过在bash脚本中附加更多值来修改$ str的值,所以我想我会使用sed。这就是我到目前为止所做的:

str_new="\"NEWPARAM1=blah\" .\n\"NEWPARAM2=blah2\" .\n";
sed -i "/START/{n;s/^/$str_new/}" script.pl

这种作品,我得到的是:

$str = "START\n" .
       "NEWPARAM1=blah" .
       "NEWPARAM2=blah2" .
       "PARAM1=blah\n" .
       "PARAM2=blah2\n" .
       "PARAM3=blah3\n";

然而,我需要的是在我添加的新参数之后出现的字面'\ n':

$str = "START\n" .
       "NEWPARAM1=blah\n" .
       "NEWPARAM2=blah2\n" .
       "PARAM1=blah\n" .
       "PARAM2=blah2\n" .
       "PARAM3=blah3\n";

我尝试在sed replace子句中使用'\ n',\ n但没有运气。任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

像这样使用:

str_new='"NEWPARAM1=blah\\n" .\n"NEWPARAM2=blah2\\n" .\n'
sed -i.bak "/START/{n;s/^/$str_new/;}" script.pl

cat script.pl
$str = "START\n" .
"NEWPARAM1=blah\n" .
"NEWPARAM2=blah2\n" .
"PARAM1=blah\n" .
"PARAM2=blah2\n" .
"PARAM3=blah3\n";

答案 1 :(得分:0)

我会考虑在perl中使用heredoc来简化问题:

$str = <<EOT;
START
PARAM1=blah
PARAM2=blah2
PARAM3=blah3
EOT