Bashを使用してパッケージ名のバージョン部分のみを抽出する

Bashを使用してパッケージ名のバージョン部分のみを抽出する

パッケージ名からパッケージバージョンのみを抽出したいです。varパッケージ名(例::)を含む変数があるとしますvar="nfs-utils-1.2.6-6.fc17.i686.rpm"。抽出された文字列はです1.2.6-6。解析に使用される方法は、すべての方法(regex、awk、cut)です。

編集:上記の例から実際に抽出したい1.2.6

答え1

これは移植性が悪いですが、この場合は次のようにgrep動作します。

echo $var | egrep -o '[0-9].*-[0-9]'
1.2.6-6

答え2

トリガーが言ったように、もしこれらのパッケージがインストールされているのと同じシステムから値を抽出するには、RPMに直接バージョンを要求できます。

ver=$(rpm --queryformat="%{VERSION}" -q nfs-utils)

答え3

最後の2つの「-」文字がバージョンを囲みます。

したがって、「$」を使用して文字列の末尾に固定された* REを作成できます。

例えば

$ echo nfs-utils-1.2.6-6.fc17.i686.rpm | sed -e 's,.*-\([^-]*\)-[^-]*$,\1,'

1.2.6

関連情報