Linux
如何在sed中的兩個單引號之間插入一條複雜的線?
我在文件中有這一行
/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
為冪等的,但這需要更多的努力。