0

SemVer からプレフィックスを削除しようとし1.2.3-prefix.42ています。つまり、 1.2.3.

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-]+)*))?

Ruby の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 で zsh を使用しています。

ありがとう

4

2 に答える 2

1

ruby の方が使い慣れているようですが、sed のように使用できます。

echo '1.2.3-prefix.42' | ruby.exe -ne 'puts $_.sub /[^\d.].+/, ""'
#=> 1.2.3

必要がなければ、本当に sed を学びたいとは思いません。

于 2015-11-26T04:47:26.267 に答える