Sed:'s' 的未知选项

Sed:'s' 的未知选项

我尝试使用 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

通常的原因是您的一个(或两个)变量包含分隔符(在您的情况下为/)。您可以

  • 如果有不存在的替代字符,请更改分隔符:

    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,这似乎就是您想要的。

相关内容