我尝试使用 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
,这似乎就是您想要的。