Linux

如何在sed中的兩個單引號之間插入一條複雜的線?

  • August 1, 2017

我在文件中有這一行/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 = ''

您可以使用如下命令來替換包含註釋 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就地更新選項。

您可以使用sed您在@Khaled 答案中看到的內容,但最好的方法是使用配置管理工具,例如:ansible、、…chef``puppet

我將使用由配置管理完全管理的模板,而不是進行搜尋和替換。只有當我希望文件被另一個配置管理或另一個使用者更改時,我才會使用搜尋和替換。

大多數腳本的問題在於它們並非設計為冪等的。如果您需要再次更改該參數,則需要更改腳本。您可以將表達式編寫sed為冪等的,但這需要更多的努力。

引用自:https://serverfault.com/questions/866257