Я полагаю, что ваш replace_with
содержит такие строки:
replace_with = "this should be\non two lines"
Вам нужно будет экранировать \n
от интерпретатора Ruby и интерпретатор оболочки, так что они могут быть прочитаны sed(1)
.Попробуйте это:
replace_with = "this should be \\\\non two lines"
Первое удвоение: \\
до \\\\
- получить все обратные слэши после Ruby.Второе удвоение: от \
до \\
- получить обратную косую черту за оболочкой.sed
должен видеть только один \
.
Простой тест:
$ cat command.rb
#!/usr/bin/ruby
#
command = "/bin/echo -e \"first line \\\\n second line\""
print `#{command}`
$ ./command.rb
first line
second line
$
Если вы должны использовать sed
из скрипта, пожалуйста, используйте основанный на массивеметод выполнения, предложенный Исмаилом и Пгуардиарио .Посетите веселый веб-сайт Общества сохранения идентификаторов процессов , чтобы узнать подробные причины, по которым безопаснее избегать использования оболочки для запуска каждого нового процесса.Лучше, конечно, просто использовать встроенную поддержку Ruby для замены.