bash は「1.2.3-SNAPSHOT」から部分文字列を抽出します。

bash は「1.2.3-SNAPSHOT」から部分文字列を抽出します。

bashの1.2.3-SNAPSHOTから1.2.3サブストリングを抽出する方法は?

頑張った

echo '1.2.3-SNAPSHOT' | grep -o "^.*(?=(\-SNAPSHOT$))"

しかし役に立たない

理想的には、入力が1.2.3または1.2.3-SNAPSHOTの場合、コマンドがどちらの場合も1.2.3を返すようにしたいと思います。

答え1

bash パラメータ拡張十分だろう

var='1.2.3-SNAPSHOT'
echo "${var%%-*}"
1.2.3
var='1.2.3'
echo "${var%%-*}"
1.2.3

答え2

たとえば、次のようにできます。egrep次のように使用してください。

echo "1.2.3-SNAPSHOT" | egrep -o '[0-9]+.[0-9]+.[0-9]'

説明するシナリオは次のとおりです。

入力が1.2.3または1.2.3-SNAPSHOTの場合、どちらの場合も1.2.3が返されます。

しかし、バージョンが「3.1.33」(3番目の数字に多くの数字を含む)と同じかもしれないと思います。この場合は、1つだけ追加しても*かまいません。

echo "3.12.32-SNAoiashfsof" | egrep -o '[0-9]+.[0-9]+.[0-9]*'

答え3

sed -ne's/^\(1\.2\.3\)\(-SNAPSHOT\)\{0,1\}$/\1/p' <in >out

...印刷されます1.2.3次のいずれかに正確に一致する入力ラインのみを出力します。1.2.3または1.2.3-SNAPSHOT

答え4

別のオプション...

echo "1.2.3-SNAPSHOT" | cut -d'-' -f1

関連情報