如何使用正则表达式将数字替换为另一个数字

时间:2012-11-27 09:37:37

标签: regex perl

我有一个名为files的文件,其中包含

100-1-0_Message1_Tableau_problem.txt
1001-1-0_EDM_Queries_v2.mdb
1001-1-0_geocodes.xlsx
1001-1-0_losstypes.xlsx
1001-10-0_Exposure_Analysis_Tables_Needed.xlsx

我想通过递增文件名的第一部分来替换此文件。即001-1-0_EDM_Queries_v2.mdb为1002-1-0_EDM_Queries_v2.mdb。使用perl的正则表达式下面无法执行此操作。

perl -e '@lines = <>;foreach $f (@lines){$n = $f; $n=~s/^(\d+)/$1+1/g; print $n}' files

打印

100+1-1-0_Message1_Tableau_problem.txt
1001+1-1-0_EDM_Queries_v2.mdb
1001+1-1-0_geocodes.xlsx

如何告诉正则表达式添加+1而不是追加?

2 个答案:

答案 0 :(得分:9)

替换通常只是一个字符串,不会被评估为表达式。要评估它,请添加e修饰符:

 $n =~ s/^(\d+)/$1+1/eg;

答案 1 :(得分:5)

您需要更改替换,以便替换为表达式,而不是简单的插值字符串。通过添加e修饰符,将其设为s/^(\d+)/$1+1/eg

来执行此操作