1

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  

私は毎日4行以下を変更する必要があります:

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

上記の行では、6798980、5788981、2898982、5893983 の部分を変更する必要があります。つまり、各番号で連続した数字を変更する必要があり、変更した数字は別の数字のコピーを取得しないでください。つまり、各数字で一意の数字を変更する必要があります。

経験値:

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";
}
}  
4

3 に答える 3

4

.ini ファイルを自分で解析して書き込むことによって車輪を再発明する必要はありません。Config::IniFilesまたは CPAN の別の同様のモジュールを使用することをお勧めします。このコードは、わずか 3 行で必要なことを実行します。

my $cfg = Config::IniFiles->new( -file => $file, -fallback => 'GENERAL' );
$cfg->setval('GENERAL', 'Intf0MacAddress', '999999999999');
$cfg->RewriteConfig;
于 2013-01-11T17:20:38.707 に答える
2

数字で何をしたいのかわかりません。詳しく説明していただけますか?あなたの例は正しいですか?一部の数字が変更され、一部の数字が変更されなかった理由を説明できますか?

とにかく、次のようなものを使用できます。

#!/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.";
于 2013-01-11T10:29:53.060 に答える
-1
#!/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;
于 2013-01-11T13:01:08.650 に答える