2013-11-27 4 views
1

Позвольте мне объяснить сценарий, с которым я столкнулся: у меня есть файл perl, который, между прочим, создает строку заголовка, используемую другим процессом. Это определено в сценарии Perl (script.pl) как:Как добавить символ символа новой строки при замене строки sed?

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

и т.д.

мне нужно изменить значение $ Обл путем добавления нескольких значений из Баш скрипт, так что я думал, что я хотел бы использовать СЕПГ. Это то, что я до сих пор:

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"; 

Однако то, что мне нужно, это буквальный «\ п», чтобы выглядеть хорошо после того, как новые параметры я добавил:

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

Я попытался с помощью «\ п», \ п в СЭД заменить пункт, но не повезло. Любая помощь будет оценена

+0

Какой язык это? Это не 'sh' или' bash'. –

+0

Извините, забыл упомянуть, что я использую это внутри сценария bash –

+0

Да, тогда я получаю $ str = "START \ n". "NEWPARAM1 = blah ". "NEWPARAM2 = blah2 ". и т. Д. В результате форматирование перепутано, то, что он делает, интерпретирует \\ n как новый символ новой строки, поэтому он добавляет новую строку после blah, а затем еще одну новую строку после '.' –

ответ

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"; 
+0

Это сработало отлично! Большое спасибо –

+0

Добро пожаловать, рад, что это сработало для вас. – anubhava

+0

просто будьте осторожны с использованием $, \ 1 -> \ 9 и & в вашем str_new, потому что есть несколько RegEx vlaue, используемых в заменяющей части s // – NeronLeVelu

0

Я бы рассмотреть вопрос об использовании Heredoc в Perl для упрощения задачи:

$str = <<EOT; 
START 
PARAM1=blah 
PARAM2=blah2 
PARAM3=blah3 
EOT 
Смежные вопросы