我现在有一个文件,我想更新变量的值。我们可以做到这一点。 文件内容:
0
现在,我希望更改<Config>
NUM1 = 8
AMV1 = 8
AMV2 = 8
DEF2 = 8
DGF = 8
</Config>
的值,我们如何在Perl中执行此操作。
答案 0 :(得分:3)
您可以使用one-liner直接从命令行执行此操作:
perl -i~ -pe 's/^(\s*NUM1 )=.*/$1=NewValue/' config-file
-i~
更改文件&#34;就位&#34;,留下附加了波浪号的备份-p
逐行读取输入并打印s///
是替换()
在正则表达式中创建一个捕获组,第一个捕获组可以从替换部分引用为$1
在脚本中,您需要将replace -p
添加到实际代码中:
#!/usr/bin/perl
use warnings;
use strict;
while (<>) {
s/^(\s*NUM1 )=.*/$1=NewValue/;
print;
}
保存到update-config
,以update-config config-file > new-config
运行。
或者,如果你想自己处理文件的打开:
#!/usr/bin/perl
use warnings;
use strict;
my $filename = 'config-file';
my $newfile = "$filename.new";
my $backup = "$filename~";
open my $IN, '<', $filename or die $!;
open my $OUT, '>', $newfile or die $!;
while (<$IN>) {
s/^(\s*NUM1 )=.*/$1=NewValue/;
print {$OUT} $_;
}
close $OUT or die $!;
rename $filename, $backup or die $!;
rename $newfile, $filename or die $!;