2014-02-20 3 views
2

Я пытаюсь обновить версию в файле assemblyinfo с помощью командной строки perl (perl -i.bak -ape), я думал (очевидно, неправильно), что s/\d+\.\d+\.(\d+).(\d+)/5.1/ просто заменит сгруппированный, но на самом деле он заменяет всю версию. вот что мне нужно.perl: search & replace by grouping

OLD=1.0.0.0 
NEW=1.0.5.1 

ответ

3

Вы можете использовать \K отрезать часть, которую вы не хотите, чтобы заменить (держать все до \K). Как так:

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

Если ваша версия Perl не поддерживает \K (старый), вы можете использовать группу захвата, как:

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

спасся Также . для вас, если вы не . соответствует любому символу (кроме новой строки без /s).

2

Поскольку вы хотите обновить определенную версию, рассмотрят соответствие этой версии и использовать позитивные назад ', чтобы сохранить часть, которую вы не хотите изменить:

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

Надеется, что это помогает!