如何在perl中修改.ini文件
我正在尝试编写一个脚本,该脚本将修改InI文件中的4行: 下面是我的Ini文件的内容:如何在perl中修改.ini文件,perl,Perl,我正在尝试编写一个脚本,该脚本将修改InI文件中的4行: 下面是我的Ini文件的内容: gEnableImps=1 gEnableBmps=1 gEnableSuspend=3 gDot11Mode=0 gEnableHandoff=0 gRoamingTime=0 Intf0MacAddress=000AF6798980 Intf1MacAddress=000AF5788981 Intf2MacAddress=000AF2898982 Intf3MacAddress=000AF58939
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 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";
}
}
我必须每天修改以下四行:
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 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";
}
}
在以上几行中,我需要更改6798980、578898128989825893983部分,我的意思是在每个数字中,任何到连续的数字都应该更改,更改的数字不应该得到另一个数字的副本,即在每个数字中,唯一的数字应该更改
Exp:
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 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";
}
}
我已经写了代码,但无法更改号码。。有人能帮我吗
我的脚本:
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 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";
}
}
#/usr/bin/perl-w
严格使用;
open(FH,“+我不明白你想对这些数字做什么。你能试着详细解释一下吗?你确定你的例子是正确的吗?你能解释一下为什么有些数字改变了,而有些数字没有改变吗
无论如何,您可以使用以下内容:
#!/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
使用警告;
严格使用;
my$file='WCN1314_qcom_cfg';
打开我的$OLD、“$file.new”或die$!;
我的$digit=1;
while(我的$line=){
如果(my($num,$addr)=$line=~/^Intf([0-3])MacAddress=000AF([0-9]+)/){
my@digits=split/,$addr;
#用数字做你需要的
$line=“Intf${num}MacAddress=000AF”。(join q(),@digits)。“\n”;
}
打印{$NEW}$行;
}
关闭$NEW;
关闭$OLD;
如果(-f“$file.bak”){unlink“$file.bak”或die“无法删除备份:$!”;}
重命名“$file.ini”、“$file.bak”或“无法备份”;
重命名“$file.new”、“$file.ini”或“无法创建ini。”;
我不明白你想对这些数字做什么。你能试着详细解释一下吗?你确定你的例子是正确的吗?你能解释一下为什么有些数字变了而有些数字没有变吗
无论如何,您可以使用以下内容:
#!/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
使用警告;
严格使用;
my$file='WCN1314_qcom_cfg';
打开我的$OLD、“$file.new”或die$!;
我的$digit=1;
while(我的$line=){
如果(my($num,$addr)=$line=~/^Intf([0-3])MacAddress=000AF([0-9]+)/){
my@digits=split/,$addr;
#用数字做你需要的
$line=“Intf${num}MacAddress=000AF”。(join q(),@digits)。“\n”;
}
打印{$NEW}$行;
}
关闭$NEW;
关闭$OLD;
如果(-f“$file.bak”){unlink“$file.bak”或die“无法删除备份:$!”;}
重命名“$file.ini”、“$file.bak”或“无法备份”;
重命名“$file.new”、“$file.ini”或“无法创建ini。”;
#!/usr/bin/perl-w
严格使用;
开放式(FH,“+”,“WCN1314_qcom_cfg.ini”);
打印FH$文件;
关闭FH;
#!/usr/bin/perl-w
严格使用;
开放式(FH,“+”,“WCN1314_qcom_cfg.ini”);
打印FH$文件;
关闭FH;
无需通过自己解析和编写.ini文件来重新发明轮子。我建议使用CPAN中的或其他类似模块。此代码只需3行即可满足您的需要
my $cfg = Config::IniFiles->new( -file => $file, -fallback => 'GENERAL' );
$cfg->setval('GENERAL', 'Intf0MacAddress', '999999999999');
$cfg->RewriteConfig;
无需通过自己解析和编写.ini文件来重新发明轮子。我建议使用CPAN中的或其他类似模块。此代码只需3行即可满足您的需要
my $cfg = Config::IniFiles->new( -file => $file, -fallback => 'GENERAL' );
$cfg->setval('GENERAL', 'Intf0MacAddress', '999999999999');
$cfg->RewriteConfig;
谢谢Choroba..有了你的想法,我做了一些更改,现在可以工作了:)谢谢Choroba..有了你的想法,我做了一些更改,现在可以工作了:)-1:全局文件句柄,join
ing整个文件(要发出声音,请执行my$file=do{local$/;};
),在不依赖任何特殊功能的情况下使用5.010
,使用C样式循环(而是:用于我的$index(0..4)
),没有\Q$foo\E
保护的regex插值,不必要的捕获,最糟糕的是:使用$&
变量。感谢您的关注!您的评论将帮助我最有效地使用perl语言!-1:全局文件句柄,连接整个文件(要发出声音,请执行我的$file=do{local$/;};
),在不依赖任何特殊功能的情况下使用5.010
,使用C样式循环(而是:用于我的$index(0..4)
),不带\Q$foo\E
保护的正则表达式插值,不必要的捕获,最糟糕的是使用$&
变量。感谢您的关注!您的评论将帮助我最有效地使用perl语言!