我在文件中有这一行/var/lib/pgsql/data/postgresql.conf
:
# archive_command = '' # command to use to archive a logfile segment
我们需要取消注释该archive_command
参数,并将其值设置为
'rsync -a %p barman@barman-backup-server-ip:/var/lib/barman/main-db-server/incoming/%f'
因此预期结果将是
archive_command = 'rsync -a %p barman@barman-backup-server-ip:/var/lib/barman/main-db-server/incoming/%f'
如何通过 sed 或 perl 单行命令执行此操作?
其他选择只需添加以下行:
archive_command = 'rsync -a %p barman@barman-backup-server-ip:/var/lib/barman/main-db-server/incoming/%f'
在该行之后:
#archive_command = ''
答案1
您可以使用如下命令来替换包含注释的 archive_command 的行:
sed -e "s|# archive_command = .*|archive_command = 'rsync -a %p barman@barman-backup-server-ip:/var/lib/barman/main-db-server/incoming/%f'|" /var/lib/pgsql/data/postgresql.conf
您可以添加-i
就地更新选项。
答案2
您可以sed
像@Khaled 的回答中看到的那样使用,但最好的方法是使用配置管理工具,如:ansible
,,...chef
puppet
我会使用完全由配置管理管理的模板,而不是进行搜索和替换。只有当我预计文件会被另一个配置管理或其他用户更改时,我才会使用搜索和替换。
大多数脚本的问题在于它们不是幂等的。如果您需要再次更改该参数,则需要更改脚本。您可以将表达式写成sed
幂等的,但这需要更多努力。