Eu tenho um arquivo ini que se parece com isso
[backup]
[persistence]
log_backup_timeout_s = 900
log_mode = normal
Quero atualizar este arquivo para
[backup]
data_backup_parameter_file = /usr/sap/SI1/SYS/global/hdb/opt/hdbconfig/param
log_backup_parameter_file = /usr/sap/SI1/SYS/global/hdb/opt/hdbconfig/param
log_backup_using_backint = true
[persistence]
basepath_logbackup = /usr/sap/SI2/HDB02/backup/log
basepath_databackup= /usr/sap/SI2/HDB02/backup/data
enable_auto_log_backup = yes
log_backup_timeout_s = 900
log_mode = normal
Responder1
Aqui está uma versão Perl que usa o Config::Tiny
módulo extremamente simples.
#! /usr/bin/perl
use Config::Tiny;
use strict;
my $cfg = Config::Tiny->read( './backup.ini' );
# create a hash containing changes to [backup]
my %B = ('data_backup_parameter_file' => '/usr/sap/SI1/SYS/global/hdb/opt/hdbconfig/param',
'log_backup_parameter_file' => '/usr/sap/SI1/SYS/global/hdb/opt/hdbconfig/param',
'log_backup_using_backint' => 'true',
);
# loop through the hash and add them to the .ini stored in $cfg
foreach my $b (keys %B) {
$cfg->{'backup'}->{$b} = $B{$b};
};
# create a hash containing changes to [persistence]
my %P = ('basepath_logbackup' => '/usr/sap/SI2/HDB02/backup/log',
'basepath_databackup' => '/usr/sap/SI2/HDB02/backup/data',
'enable_auto_log_backup' => 'yes',
);
# loop through the hash and add them to the .ini stored in $cfg
foreach my $p (keys %P) {
$cfg->{'persistence'}->{$p} = $P{$p};
};
$cfg->write( 'new.ini' );
Config::Tiny
é empacotado para Debian (e derivados), Fedora, Centos, OpenSuSE e outras distros, portanto é facilmente instalado usando as ferramentas de gerenciamento de pacotes apropriadas. Em outros sistemas, instale com CPAN.
Existem vários outros módulos Perl para trabalhar com arquivos .ini, alguns com mais recursos, outros que adotam uma abordagem mais orientada a objetos. Config::Tiny
apenas funciona com um hash e não requer tanta configuração ou leitura de páginas de manual como as mais complexas, por isso é bom para uma tarefa simples como esta.