У меня есть ini-файл, который выглядит так
[backup]
[persistence]
log_backup_timeout_s = 900
log_mode = normal
Я хочу обновить этот файл до
[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
решение1
Вот версия на Perl, которая использует чрезвычайно простой Config::Tiny
модуль.
#! /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
упакован для Debian (и производных), Fedora, Centos, OpenSuSE и других дистрибутивов, поэтому его легко установить с помощью соответствующих инструментов управления пакетами. В других системах установите с помощью CPAN.
Существует множество других модулей Perl для работы с файлами .ini, некоторые из которых обладают большим количеством функций, некоторые используют более объектно-ориентированный подход. Он Config::Tiny
работает только с хэшем и не требует такой настройки или чтения страниц руководства, как более сложные модули, поэтому подходит для такой простой задачи, как эта.