Quero atualizar um arquivo INI usando o awk

Quero atualizar um arquivo INI usando o awk

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::Tinymó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::Tinyapenas 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.

informação relacionada