Я пытаюсь снять префиксы из SemVer, т. Е. Сделать 1.2.3-prefix.42
в 1.2.3
.Замена RegEx работает в Ruby gsub, но не с sed
Я использую этот RegEx найти в https://github.com/mojombo/semver/issues/32#issuecomment-7663411:
^(\d+\.\d+\.\d+)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?
При использовании метода gsub
Руби, она работает:
puts '1.2.3-alpha.4'.gsub(/^(\d+\.\d+\.\d+)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/, '\1')
# => 1.2.3
Но при использовании sed
формы терминал он не делает:
$ echo '1.2.3-alpha.4' | sed -e 's/^(\d+\.\d+\.\d+)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/\1/g'
$ 1.2.3-alpha.4
Что мне не хватает?
Я использую ЗШ на Mac OS X.
Благодаря
Я считаю, что группы, не захватывающие захват ('(?: ...)'), недоступны в sed. Дополнительная информация: http://stackoverflow.com/questions/4823864/how-do-you-specify-non-capturing-brackets-in-sed –
Хотя группы захвата, вероятно, вы основная проблема, я был бы удивлен, если установка пакета 'sed' в OSX поддерживает' \ d', вместо этого используйте '[0-9]'. Удачи. – shellter