文字列一致後に1文字だけを取得する方法(rpmでRHELバージョンを確認)

文字列一致後に1文字だけを取得する方法(rpmでRHELバージョンを確認)

ホスティングサーバーの設定と構成に使用するオープンソースシェル/bashスクリプトがあり、cloudflareをインストールするには、次のようにRHELバージョンをインポートします。このコマンド:

RHEL_VERSION=$(rpm -q --qf "%{VERSION}" $(rpm -q --whatprovides redhat-release) );

問題は、マイナーバージョンが存在すると、メジャーバージョンだけでなく、対応するマイナーバージョンも返されることです。上記のcmdを使用すると、次のものが返されます7.2。問題は、メジャーバージョン番号だけが必要であることです。

私はおそらく文字列の一部を得るために、その後、などをrpm -q --whatprovides redhat-release返すことを使用できると思いました。cloudlinux-release-7.2-1.el7.x86_64sedawkel7

パッケージURLを生成するときにこの文字列を使用するには、次のものが必要です。

PACKAGE_URL="http://pkg.cloudflare.com/cloudflare-release-latest.el${RHEL_VERSION}.rpm"

答え1

メジャーバージョンコンポーネントを傍受するには:

... | grep -Eo '^[0-9]*'

-oこの拡張オプションはgrep一致する部分だけを印刷します。ここで、最初の数字の前にはドット文字が続きます。

答え2

$ RHEL_VERSION=7.2-1.el6
$ echo "${RHEL_VERSION%%[!0-9]*}"
7
$ echo "${RHEL_VERSION%%-*}"
7.2
$ echo "${RHEL_VERSION##*.}"
el6
$ echo "${RHEL_VERSION##*[!0-9]}"
6

答え3

私はいません。回転速度このシステムではできましたが、私はこれができました強く打つ:

PROVIDED=cloudlinux-release-7.2-1.el7.x86_64
RHEL_VERSION=`echo $PROVIDED  | sed 's/^.*-release-\([0-9]\).*/\1/'  
echo $RHEL_VERSION 

" 7"を出力します。

必要に応じて、-release-""をより適切な正規表現に置き換えることができます。

次のことを試すことができます。

echo $PROVIDED  |  sed -ne 's/^[^-]*-\([^-]*\)-.*$/\1/p'

release私には " "が返されます。[--バージョン: sed(GNU sed) 4.2.2]

答え4

相談を受けることもできますこの素晴らしい答えオペレーティングシステム名(およびバージョン)を確実に決定することに関連しています。その答えに基づいて、次のことができます。

RHEL_VERSION="$(lsb_release -r | awk '{print $NF}')"

次に、提供された他の回答を使用してメジャーバージョン番号を抽出します。利点は、このアプローチがRHELよりも多くのディストリビューションで機能することです。

バージョン番号が純粋に数字(小数点で区切られたキー番号とマイナー番号)であると確信している場合は、すべての操作を一度に実行できます。

RHEL_MAJOR_VERSION="$(lsb_release -r|awk '{printf "%d\n",$N}')"

関連情報