让我解释一下我面临的情况:我有一个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但没有运气。任何帮助将不胜感激
答案 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