Обычно причиной является то, что одна (или обе) из ваших переменных содержит разделитель (в вашем случае /
). Вы можете
измените разделитель, если у вас есть альтернативный символ, который не будет присутствовать:
sed -e "s#${VAR1}#${VAR2}#g"
или же
замените разделитель в переменных:
sed -e "s/${VAR1//\//\\/}/${VAR2//\//\\/}/g"
Могут быть и другие замены, которые вы также должны сделать в $VAR1
если хотите, чтобы он совпадал с литералом, поскольку s///
всегда использует регулярные выражения.
Однако, глядя на то, что вы показали нам, кажется, что все, что вы действительно пытаетесь сделать, это изменить значение, назначенное для shared_buffers
в файле конфигурации, на фиксированное значение 8GB
, и в этом случае нет необходимости в каких-либо переменных:
sed -i -e '/^shared_buffers[ \t]/s/=[ \t]*[^# \t]\+/= 8GB/' /postgresql.conf
Вы можете прочитать это, как и в каждой строке, которая начинается с shared_buffers
и горизонтального пробела, а затем заменить первое =
и следующее слово = 8GB
, как вы и хотите.