0

以下の値を持つ文字列があります

String1=winos-app-1.2.0-4.20120308.InLinuxOS.x86_64

この文字列から「1.2.0-4」のバージョンのみを抽出する必要があります

以下のようにsedで正規表現を試しました

sed -ne 's/[^0-9]*\(\([0-9]\.\)\{0,1\}[0-9][^.]\).*/\1/p'

しかし、結果「1.2.0-」しか得られず、「-」の後に数字がありません。これは4です。修正しようとしましたが、nullが返されます。

親切なアドバイス

4

5 に答える 5

1

grepはどうですか:

grep -Po "(?<=-)[\d.-]*(?=.\d{8})"
于 2013-03-08T23:30:19.443 に答える
1
sed -n 's/^.*-\([0-9.]*-[0-9]*\)\..*$/\1/p'
于 2013-03-08T23:36:38.380 に答える
0

これを試すことができますか?

[^0-9]*\(\([0-9]\.\)\{0,2\}[0-9][^.]\).*

于 2013-03-08T23:35:08.627 に答える
0

パラメータ展開を試すこともできます:

string1=winos-app-1.2.0-4.20120308.InLinuxOS.x86_64
string2=${string1%".${string1#*-*-*-*.}"}
version=${string2#*-*-}
printf "%s\n" "$version"
于 2013-03-09T14:01:23.247 に答える