2012-02-29 62 views
1

問:如何添加此信息$ sv?用新的替換舊的。增加後用newone替換舊數字

$少stver.php

define('update_ver', 328); 

$少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 

所有我需要的是329至328更換成stver .php

+0

如果我理解正確的話,以後你運行'rec.pl'你想'stver.php'去讀'define('update_ver',329);'? – MattLBeck 2012-02-29 16:47:18

+0

yeap,它的正確 – user1194977 2012-02-29 16:48:13

+1

[我的字符串中的perl搜索數字]的可能重複(http://stackoverflow.com/questions/9415946/perl-search-digits-in-my-string) – daxim 2012-02-29 17:56:59

回答

2

這個工程,你excpect,每次加1到stver.php的號碼,你執行它:

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"; 
+0

非常感謝! – user1194977 2012-03-01 08:13:05

0
perl -i.bak -pe "s/define('update_ver', 328);/define('update_ver', 329);/" stver.php 

您將剩下包含您想要的信息的stver.php以及包含原始信息的名爲stver.php.bak的備份。

+0

不,$ a和$ b應該自動更換。作爲自動發作功能。 rec.pl中的代碼只是另一個腳本的一部分 – user1194977 2012-02-29 16:54:27

1
perl -i.bak -pe's/define\('\''update_ver'\'', \K(\d+)(?=\);)/$1+1/e' stver.php