[英]How do I replace a string with a newline using a bash script and sed?
[英]How do I add a literal newline character while using sed's string replace?
讓我解釋一下我面臨的情況:我有一個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,但是沒有運氣。 任何幫助,將不勝感激
像這樣使用它:
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";
我會考慮在perl中使用Heredoc來簡化問題:
$str = <<EOT;
START
PARAM1=blah
PARAM2=blah2
PARAM3=blah3
EOT
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.