SH - Заменить текст

Я хочу заменить одну строку на другую, но не могу. Код:

updatedb
MCRYPTINI=$(locate mcrypt.ini | grep 'apache2')
MCRYPTSO=$(locate mcrypt.so | grep "/mcrypt.so")

OLD="extension=mcrypt.so"
NEW="extension=$MCRYPTSO"

echo $MCRYPTINI
echo $MCRYPTSO
echo $OLD
echo $NEW
echo "'s/$OLD/$NEW' $MCRYPTINI"

sed -i 's/$OLD/$NEW' $MCRYPTINI

И результат:

sudo sh testScript.sh
/etc/php5/apache2/conf.d/20-mcrypt.ini
/usr/lib/php5/20121212/mcrypt.so
extension=mcrypt.so
extension=/usr/lib/php5/20121212/mcrypt.so
's/extension=mcrypt.so/extension=/usr/lib/php5/20121212/mcrypt.so' /etc/php5/apache2/conf.d/20-mcrypt.ini
sed: -e expression #1, char 11: unterminated `s' command

Для ответа мне не нужно использовать «sed», но это выглядит легко и хорошо. Я использую sh, а не bash, потому что хочу, чтобы код можно было использовать во всех системах, поэтому я предпочитаю ответы, соответствующие этому принципу.

ОБНОВИТЬ

sed -i "s/$OLD/$NEW/" $MCRYPTINI

ошибка:

sed: -e expression #1, char 14: unknown option to `s'

person Community    schedule 31.07.2017    source источник
comment
Вы уже пробовали добавить / после $NEW в выражение sed?   -  person Danibix    schedule 31.07.2017
comment
Хорошо, это решило проблему... Но строка не изменилась   -  person    schedule 31.07.2017
comment
Возможный дубликат Использовать переменную в команде sed   -  person Danibix    schedule 31.07.2017


Ответы (2)


Добавьте косую черту и двойные кавычки:

sed -i  "s/$OLD/$NEW/" file
person Guru    schedule 31.07.2017
comment
Последняя косая черта правильная, но с двойными кавычками --> sed: -e выражение #1, символ 34: неизвестная опция для `s' - person ; 31.07.2017
comment
@oootramas: В вашем фрагменте отсутствовала последняя косая черта. И двойные кавычки также должны быть добавлены. - person Guru; 31.07.2017

Решение может быть:

sed -i "s/$OLD/$NEW/" $MCRYPTINI

но $NEW - это путь, поэтому мне нужно заменить "/" на другой символ, например "+"

sed -i "s+$OLD+$NEW+" $MCRYPTINI
person Community    schedule 31.07.2017