![我想使用 awk 更新 INI 文件](https://linux22.com/image/76586/%E6%88%91%E6%83%B3%E4%BD%BF%E7%94%A8%20awk%20%E6%9B%B4%E6%96%B0%20INI%20%E6%96%87%E4%BB%B6.png)
我有一个像这样的 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::Tiny
为 Debian(及其衍生版本)、Fedora、Centos、OpenSuSE 和其他发行版打包,因此可以使用适当的包管理工具轻松安装。在其他系统上,使用 CPAN 进行安装。
还有许多其他 perl 模块可用于处理 .ini 文件,有些具有更多功能,有些则采用更面向对象的方法。 Config::Tiny
只需使用哈希值,不需要像更复杂的那样需要太多的设置或手册页阅读,因此对于像这样的简单任务很有用。