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ハッシュを使用すると、複雑な設定と同じくらい多くの設定やマニュアルページを読む必要がないため、このような簡単な操作に役立ちます。

おすすめ記事