perl:搜索&替换为分组

时间:2014-02-20 17:39:27

标签: regex perl

我正在尝试使用perl命令行(perl -i.bak -ape)更新assemblyinfo文件中的版本,我在想(显然是错误的)s/\d+\.\d+\.(\d+).(\d+)/5.1/只会替换分组,但实际上它会替换整个版本。这就是我需要的。

OLD=1.0.0.0
NEW=1.0.5.1

2 个答案:

答案 0 :(得分:3)

您可以使用\K来删除您不想替换的部分(将所有内容保留到\K)。像这样:

s/\d+\.\d+\.\K\d+\.\d+/5.1/

如果您的Perl版本不支持\K(旧版),您可以使用以下捕获组:

s/(\d+\.\d+)\.\d+\.\d+/$1.5.1/

如果您没有.匹配任何字符(除了.的新行除外),也会为您/s转义。

答案 1 :(得分:2)

由于您要更新特定版本,请考虑匹配该版本并使用正面的lookbehind来保留您不想更改的部分:

s/(?<=1\.0\.)0\.0/5.1/

希望这有帮助!