簡體   English   中英

如何在Perl中修改.ini文件

[英]How to modify the .ini file in perl

我正在嘗試編寫一個腳本,它將修改InI文件中的4行:

以下是我的Ini文件的內容:

gEnableImps=1
gEnableBmps=1
gEnableSuspend=3
gDot11Mode=0
gEnableHandoff=0
gRoamingTime=0 


Intf0MacAddress=000AF6798980
Intf1MacAddress=000AF5788981
Intf2MacAddress=000AF2898982
Intf3MacAddress=000AF5893983


InfraUapsdVoSrvIntv=0 
InfraUapsdViSrvIntv=0
InfraUapsdBeSrvIntv=0
InfraUapsdBkSrvIntv=0 


DelayedTriggerFrmInt=18000


gEnableFWRssiMonitoring=0  

我必須每天修改以下四行:

Intf0MacAddress=000AF6798980
Intf1MacAddress=000AF5788981
Intf2MacAddress=000AF2898982
Intf3MacAddress=000AF5893983

在上述幾行中,我需要更改6798980、5788981,2898982、5893983部分,這意味着在每個數字中,任何連續數字都應更改,並且更改數字不應獲取另一個數字的副本,即在每個數字中,唯一數字應更改。

Exp:

6798980  after change -> 6791280
5788981  after change -> 5783481   
2898982  after change -> 2897682

我已經編寫了代碼,但是我無法更改號碼..任何機構都可以給我一些幫助嗎

我的劇本:

#!/usr/bin/perl -w
use strict;
open(FH,"+<","WCN1314_qcom_cfg.ini")
                       or die "File not found";

my @lines=<FH>;
foreach my $line (@lines)
{
  if(($line =~ /Intf0MacAddress/ ||$line =~ /Intf1MacAddress/||$line =~ /Intf2MacAddress/||$line =~ /Intf3MacAddress/) )
{
  print "$line\n";
}  
else
{
  print "Not found\n";
}
}  

無需自己解析和編寫.ini文件來重新發明輪子。 我建議使用Config :: IniFiles或CPAN的另一個類似模塊。 此代碼僅用3行即可完成您需要的操作。

my $cfg = Config::IniFiles->new( -file => $file, -fallback => 'GENERAL' );
$cfg->setval('GENERAL', 'Intf0MacAddress', '999999999999');
$cfg->RewriteConfig;

我不明白您要如何處理這些數字。 您可以嘗試詳細解釋嗎? 您確定您的示例正確嗎? 您能解釋為什么有些數字更改而有些數字沒有更改嗎?

無論如何,您可以使用類似以下的內容:

#!/usr/bin/perl
use warnings;
use strict;

my $file = 'WCN1314_qcom_cfg';
open my $OLD, '<', "$file.ini" or die $!;
open my $NEW, '>', "$file.new" or die $!;
my $digit = 1;
while (my $line = <$OLD>) {
    if (my ($num, $addr) = $line =~ /^Intf([0-3])MacAddress=000AF([0-9]+)/) {
        my @digits = split //, $addr;

        # Do what you need with the digits

        $line = "Intf${num}MacAddress=000AF" . (join q(), @digits) . "\n";
    }
    print {$NEW} $line;
}
close $NEW;
close $OLD;

if (-f "$file.bak") { unlink "$file.bak" or die "Cannot remove backup: $!"; }
rename "$file.ini", "$file.bak"          or die "Cannot backup.";
rename "$file.new", "$file.ini"          or die "Cannot create ini.";
#!/usr/bin/perl -w
use strict;
open(FH,"+<","WCN1314_qcom_cfg.ini")
                       or die "File not found";
use 5.010;
my $file=join "", <FH>;

for (my $index = 0; $index < 4; $index++) {
    if ($file =~ m/(Intf($index)MacAddress=000AF)(\d{7})/) {
        my $number = $3;
        #Do what you need with number.
        $file =~ s/$&/Intf($index)MacAddress=000AF($number)/;
    }
}

open(FH,">","WCN1314_qcom_cfg.ini");
print FH $file;
close FH;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM