Ich möchte eine INI-Datei mit awk aktualisieren

Ich möchte eine INI-Datei mit awk aktualisieren

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::TinyModul 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::Tinyist 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::Tinyfunktioniert 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.

verwandte Informationen