Ich habe eine INI-Datei, die so aussieht
[backup]
[persistence]
log_backup_timeout_s = 900
log_mode = normal
Ich möchte diese Datei aktualisieren auf
[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
Antwort1
Hier ist eine Perl-Version, die das extrem einfache Config::Tiny
Modul verwendet.
#! /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
ist für Debian (und Derivate), Fedora, Centos, OpenSuSE und andere Distributionen gepackt und kann daher mit den entsprechenden Paketverwaltungstools einfach installiert werden. Auf anderen Systemen installieren Sie es mit CPAN.
Es gibt zahlreiche andere Perl-Module für die Arbeit mit INI-Dateien, einige mit mehr Funktionen, andere mit einem eher objektorientierten Ansatz. Config::Tiny
funktioniert einfach mit einem Hash und erfordert nicht so viel Einrichtung oder Lesen von Manpages wie die komplexeren, eignet sich also gut für eine einfache Aufgabe wie diese.