2017-02-22 38 views
0

Позвольте мне начать с того, что я пытаюсь сделать.
У меня есть инструкция sed, чтобы найти определенную строку, а затем изменить линию под ней. Для этого сначала удаляю строку под ней и добавляю строку, которую я хочу.Выполнение sed через функцию, которая дает неизмененный шаблон замещения

sed -e '/'"$rootline"'/ {N;s/\n.*//;}' -e '/'"$rootline"'/ a\ 
'"$1 $linetoadd" <tmpmain >tmpsec 

Здесь первое выражение находит строку с выражением в $ rootline и затем удаляет следующую строку. И выражение 2 добавляет строку, которую я хочу добавить после строки с $ rootline.
Раньше у меня это было в отдельном файле .sh, и когда я вызывал файл с sudo (используя sudo для какой-либо другой важной операции в файле), он работал отлично.
Теперь я пытаюсь поместить его в функцию и вызвать ее через тот же .sh-файл. Чтобы вызвать функцию с помощью sudo, я использую это значение answer. Все, кажется, работает нормально по отношению к SUDO части функции, но когда дело доходит до выше указанного SED операции, я получаю следующее

sed: 1: "/root ALL=/ {N;s/ 
.*//;} 
": unterminated substitute pattern #$rootline='root ALL=' 

Любой ключ почему я получаю эту ошибку?

Примечание: Я работаю с Mac OS X

ответ

0

я получил ошибку. Довольно глупо.
То, как я использовал функцию sudo для функции, заключалось в том, чтобы отобразить содержимое функции в файл. Got it from here.
И когда он повторил следующий код в файл.

sed -e '/'"$rootline"'/ {N;s/\n.*//;}' -e '/'"$rootline"'/ a\ 
'"$1 $linetoadd" <tmpmain >tmpsec 

Он принимает «\ п» в качестве новой строки самого характера и печати новой строки вместо «\ п» и, следовательно, SED ошибки.