我在某些文件中有一行,其中只有年份不同——我需要增加年份并替换前面的文本,例如:
tdef 12 linear 18Z31dec2012 1mo
Run Code Online (Sandbox Code Playgroud)
应该变成:
tdef 12 linear 00Z01jan2013 1mo
Run Code Online (Sandbox Code Playgroud)
我有一个 perl one liner,我无法同时替换文本和增量。我已经尝试了很多组合,正确的格式让我望而却步。这会增加,但我当然会丢失文本:
perl -pe 's/18Z31dec(\d+)/ 1 + $1 /ge'
Run Code Online (Sandbox Code Playgroud)
我不知道如何在替换中插入任何文本并保留递增的年份:
perl -pe "s/18Z31dec(\d+)/'00Z01jan($1 + 1)'/ge"
Run Code Online (Sandbox Code Playgroud)
输出这个:
tdef 12 linear 00Z01jan( + 1) 1mo
Run Code Online (Sandbox Code Playgroud)
perl -pe 's/18Z31dec(\d+)/"00Z01jan" . ($1 + 1)/ge'
Run Code Online (Sandbox Code Playgroud)
当您使用 时/e,替换的右侧是完整的 Perl 表达式。所以你必须引用文字字符串,将它们连接起来.,等等。
您可以使用基于标量解引用的有点不吸引人的任意表达式插值语法,而不是串联:
perl -pe 's/18Z31dec(\d+)/"00Z01jan${\($1 + 1)}"/ge'
Run Code Online (Sandbox Code Playgroud)
结果一样。