簡體   English   中英

如何在使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM