Perl one liner增加值并替换文本

时间:2015-04-10 23:59:05

标签: perl

我在一些只有年份不同的文件中有一行 - 我需要增加年份并替换前面的文本,例如:

tdef 12 linear 18Z31dec2012 1mo

应该成为:

tdef 12 linear 00Z01jan2013 1mo

我有一个perl one liner,我无法同时替换文本和增量。我尝试了很多组合,正确的格式避开了我。这个增量但当然我丢失了文字:

perl -pe 's/18Z31dec(\d+)/ 1 + $1 /ge'

我无法确定如何在替换上插入任何文字并保留增加的年份:

perl -pe "s/18Z31dec(\d+)/'00Z01jan($1 + 1)'/ge"

输出:

tdef 12 linear 00Z01jan( + 1) 1mo

1 个答案:

答案 0 :(得分:3)

perl -pe 's/18Z31dec(\d+)/"00Z01jan" . ($1 + 1)/ge'

当您使用/e时,替换的右侧是完整的Perl表达式。所以你必须引用文字字符串,将它们与.连接起来等等。

您可以使用基于标量解除引用的有点不具吸引力的任意表达式插值语法而不是连接:

perl -pe 's/18Z31dec(\d+)/"00Z01jan${\($1 + 1)}"/ge'

同样的结果。