Утро,
У текущего проекта, над которым я должен работать, была прежняя схема именования, которая беспокоит меня ...
Base.v2.c
Base.v2a.c
Slider.v4a.h
Area.v2a.2.h
Мне сказали, что буква «а» в версии должна была идентифицировать «альфа» версии, требующие дополнительной работы. На этом этапе проекта я могу удалить «а» и заменить его на «.1» (v2a -> v2.1).
Есть много файлов, помимо того, что я готов сделать вручную.
Я знаю, что могу использовать команду переименования, чтобы переименовать все файлы одновременно, но у меня возникла проблема с тем, как это сделать. Если я использую что-то вроде:
rename 's/[0-9]a/.1/' *
тогда я потеряю последнюю цифру номера версии. Есть ли способ, чтобы переименовать (или другой инструмент командной строки) запомнить часть регулярного выражения, используемого для поиска файла? Так что от «[0-9] a» до «[0-9] .1» изменится с 1a на 1,1, с 4a на 4.1 и т. Д.
источник
v2a < v2 < 2.1
. Другими словами, версия two-alpha представляет версию, приводящую ко второй версии, а не версию после нее. Было бы лучше переименовать его в версию1.99
или что-то подобное.Ответы:
Вы можете использовать группы захвата :
Или вы можете использовать вид сзади :
Или, аналогично взгляду сзади, утверждение 0-длины
\K
, что означает «забудь, что все соответствовало до этой точки»:Обратите внимание, что я использовал более короткий
\d
вместо[0-9]
. Они эквивалентны, ноrename
представляют собой сценарий perl, поэтому понимают синтаксис регулярных выражений, совместимых с Perl (PCRE).Обратите внимание, что это изменит только первое вхождение числа с последующим
a
. Это может или не может быть то, что вам нужно, в зависимости от ваших имен файлов.На
-n
маркеrename
показывает , что он будет делать на самом деле , не делая ничего. Как только вы подтвердите, что он работает как положено, удалите его, чтобы фактически изменить имена файлов.источник
Измените команду следующим образом:
s/<souce>/<replacement>/
заменит исходную строку (которая может быть регулярным выражением) на строку замещения.(regexp)
,(string)
и т.д. , будут назначены в качестве значений последовательных переменных$1
,$2
и т.д ..$1
будет расширена со своим значением, которое в этом случае должно совпадать с регулярным выражением[0-9]
.источник