如何用匹配数计算

pee*_*eer 2 perl

我有一个文件,其中每一行以整数开头,我想从每个数字中减去2,以便例如

2 foo
2 bar
3 foo
3 bar
Run Code Online (Sandbox Code Playgroud)

0 foo
0 bar
1 foo
1 bar
Run Code Online (Sandbox Code Playgroud)

我试过了

perl -pe 's/^(\d+)/($1 - 2)/g' file   #-> '(2 - 2) foo'...
perl -pe 's/^(\d+)/add($1, -2)/g' file #-> 'add(2, -2) foo'...
Run Code Online (Sandbox Code Playgroud)

两者都不适合我.我已经读过Perl会根据我使用它们的上下文将字符串解释为数字,但我似乎无法明确表达我的意图.

too*_*lic 5

你需要使用e修改器Ë计价的右侧的表达式:

perl -pe 's/^(\d+)/$1 - 2/ge' file
Run Code Online (Sandbox Code Playgroud)

我还减去2得到你想要的输出.

参考perlop