2

C++ ヘッダーで特定の宣言を見つけて変更する小さな perl スクリプトを作成したいと考えています。これまでのところ、「検索」部分を作成できました。

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. ソリューションをビルドする前に毎回このスクリプトを呼び出して、次の値が 1 ずつ増加するようにしますBUILD_COUNT。どうすればそれができますか。

4

2 に答える 2

10

ワンライナーで十分です。

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

バックアップなしで-iスイッチを使用するのは危険ですが、これはあなたが望んでいることだと思います。安全性を高めるために、完全ではありませんが、を使用して-i.bakください。

-pスイッチは引数ファイルを開いて読み取ります。置換演算子の/eオプションを使用すると、置換式が挿入される前に評価されます。\K脱出はそれが保持される前にあるものは何でも引き起こします。

于 2012-10-16T15:50:33.613 に答える
0

括弧を使用してバージョンを$1にキャプチャし、印刷する前にインクリメントします

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

}
于 2012-10-16T15:51:10.773 に答える