使用 sed 更改包含 ' 的配置文件中的值



我想用sed替换我的postgresql.conf中的一个值,这是相关的部分:

#archive_mode = off
#archive_command = 'blah'

为了将archive_mode设置为on,我使用以下sed命令,并且工作正常:

sed -ri "s/#(archive_mode) .*$/1 = on/" postgresql.conf

现在我也想把archive_command改成'bleh'。我尝试了以下命令,但 sed 总是抱怨'字符:sed: -e expression #1, char 41: unknown option to s'

sed -ri "s/#(archive_command) .*$/1 = 'bleh'/" postgresql.conf

我尝试用'逃离',但这没有帮助,有谁知道我如何让 sed 在我的替换字符串中包含 '?

您只需要删除#符号即可。

$ sed -r "s/(archive_command) .*$/1 = 'bleh'/" file
archive_mode = off
archive_command = 'bleh'

两者兼而有之。

$ sed -r "s/(archive_mode) .*$/1 = on/;s/(archive_command) .*$/1 = 'bleh'/" file
archive_mode = on
archive_command = 'bleh'

使用不同的分隔符。

$ sed -r "s~(archive_mode) .*$~1 = on~;s~(archive_command) .*$~1 = 'bleh'~" file
archive_mode = on
archive_command = 'bleh'

最新更新