Quiero actualizar un archivo INI usando awk

Quiero actualizar un archivo INI usando awk

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::Tinymó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::Tinyestá 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::Tinysimplemente 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.

información relacionada