找到一个数字并递增它

时间:2012-10-16 15:38:39

标签: perl

我想创建一个小的perl脚本,它会在c ++头文件中找到某个声明来修改它。到目前为止,我已经能够创建“查找”部分:

my $buildFile = "..\\Support\\BuildVersion.h";

my @result;
open( File, $buildFile ) or die "Can't open $buildFile.\n";
@result = <File>;
close( File );

print "Updating build version...\n";

open( NEWFOUT, ">", "$buildFile" ) or die "Can't open $buildFile.\n";
foreach( @result )
{
    print $_;
    if( $_ =~ m/#define BUILD_COUNT [0-9]+/ig )
    {
        $_ =~ s/$_/#define BUILD_COUNT 77/;

    }
}
print NEWFOUT @result;
close( NEWFOUT );

因此,在我的c ++文件中,我将此定义命名为BUILD_COUNT。我想在每次构建解决方案之前调用此脚本,以便它将BUILD_COUNT之后的值增加1。我怎么能这样做。

2 个答案:

答案 0 :(得分:10)

单线应该足够了。

perl -i -pe 's/#define BUILD_COUNT \K(\d+)/$1 + 1/e' yourfile

使用没有备份的-i开关是危险的,但我觉得这就是你想要的。为了更安全,但不完整,请使用-i.bak

-p开关将打开并读取参数文件,替换运算符上的/ e选项将导致替换表达式在插入之前进行评估。 \K转义将导致保留之前的任何内容。

答案 1 :(得分:0)

使用括号将版本捕获到$ 1并在打印前递增

if( $_ =~ m/#define BUILD_COUNT ([0-9]+)/ig )
{
    my $v = $1 + 1;
    $_ =~ s/$_/#define BUILD_COUNT $v/;

}