awk를 사용하여 INI 파일을 업데이트하고 싶습니다.

awk를 사용하여 INI 파일을 업데이트하고 싶습니다.

이런 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::TinyDebian(및 그 파생 제품), Fedora, Centos, OpenSuSE 및 기타 배포판용으로 패키지되어 있으므로 적절한 패키지 관리 도구를 사용하여 쉽게 설치할 수 있습니다. 다른 시스템에서는 CPAN을 사용하여 설치하세요.

.ini 파일 작업에 사용할 수 있는 다른 많은 Perl 모듈이 있으며, 일부는 더 많은 기능을 제공하고 다른 일부는 보다 객체 지향적인 접근 방식을 제공합니다. Config::Tiny해시를 사용하면 복잡한 설정만큼 많은 설정이나 매뉴얼 페이지 읽기가 필요하지 않으므로 이와 같은 간단한 작업에 유용합니다.

관련 정보