Tengo un archivo ini que se parece a este
[backup]
[persistence]
log_backup_timeout_s = 900
log_mode = normal
Quiero actualizar este archivo a
[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
Respuesta1
Aquí hay una versión de Perl que utiliza el Config::Tiny
módulo extremadamente simple.
#! /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
está empaquetado para Debian (y derivados), Fedora, Centos, OpenSuSE y otras distribuciones, por lo que se instala fácilmente utilizando las herramientas de administración de paquetes adecuadas. En otros sistemas, instale con CPAN.
Existen muchos otros módulos de Perl para trabajar con archivos .ini, algunos con más funciones y otros que adoptan un enfoque más orientado a objetos. Config::Tiny
simplemente funciona con un hash y no requiere tanta configuración o lectura de páginas de manual como los más complejos, por lo que es bueno para una tarea simple como esta.