1

Я пытаюсь изменить файл конфигурации с помощью скрипта bash. Я использую команду sed, чтобы изменить, как показано ниже.

VAR1=$(cat postgresql.conf | grep "shared_buffers =" | cut -d# -f1)
VAR2=$(shared_buffers = 8GB)
sed -ie s/${VAR1}/${VAR2}/g postgresql.conf 

Я пытался, но это дало мне ошибку.

sed: -e выражение # 1, символ 29: неизвестная опция для `s '

Чего не хватает?

1 ответ1

4

Обычно причиной является то, что одна (или обе) из ваших переменных содержит разделитель (в вашем случае /). Вы можете

  • измените разделитель, если у вас есть альтернативный символ, который не будет присутствовать:

    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, как вы и хотите.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .