【问题标题】:replacing older digits by newone after increment增量后用新数字替换旧数字
【发布时间】:2012-02-29 16:29:58
【问题描述】:

问:如何添加这个信息$sv?用新的替换旧的。

$ 少stver.php

define('update_ver', 328);

$ less rec.pl

#!/usr/bin/perl
$sv="stver.php";
open (NUMECHO, "$sv") || die "Can't open $sv";
while (<NUMECHO>=~m/(\d+)/g)    #digits output
{
 chomp;
 #print "$1\n";
 $b=$1;
 $a=$b;
 ++$a;
}
close (NUMECHO);
print "Old value = $b\n";
print "New value = $a\n";

当我运行脚本时

$ ./rec.pl
Old value = 328
New value = 329

我只需要将 328 替换为 329 到 stver.php

【问题讨论】:

  • 如果我理解正确的话,在你运行rec.pl 之后你想让stver.php 读取define('update_ver', 329);

标签: perl file increment


【解决方案1】:

这和你预期的一样,每次执行它时都会在 stver.php 的编号上加 1:

rec.pl

#!/usr/bin/perl
$sv="stver.php";
open (NUMECHO, "<$sv") or die("Unable to open $sv");
open (TMP, "> $sv.tmp") or die("Unable to open $sv.tmp");
while(<NUMECHO>) {
    if(/(\d+)/) {
        m/(\d+)/g;
        $b = $1;
        $a = "$b" + "1";
        s/$b/$a/;
    }
    print TMP $_;
}
close(NUMECHO);
close(TMP);
rename "$sv.tmp", $sv;
print "Old value = $b\n";
print "New value = $a\n";

【讨论】:

    【解决方案2】:
    perl -i.bak -pe's/define\('\''update_ver'\'', \K(\d+)(?=\);)/$1+1/e' stver.php
    

    【讨论】:

      【解决方案3】:
      perl -i.bak -pe "s/define('update_ver', 328);/define('update_ver', 329);/" stver.php
      

      您将留下包含所需信息的 stver.php 和包含原始信息的名为 stver.php.bak 的备份。

      【讨论】:

      • 不,$a 和 $b 应该自动替换。就像自动增加功能一样。 rec.pl 中的代码只是另一个脚本的一部分
      猜你喜欢
      • 1970-01-01
      • 2016-09-14
      • 2021-03-19
      • 2015-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-08
      • 1970-01-01
      相关资源
      最近更新 更多