/etc/redhat-relaseからRed Hatバージョンレベルを抽出する

/etc/redhat-relaseからRed Hatバージョンレベルを抽出する

Red Hatボックスの実際のバージョンレベルを変数にドラッグする方法を作成する必要があります。

/etc/redhat-releaseファイルに集中しています。私はこれが単純なものだと思いましたがawk '{ print $7 }'、RH8は値を6番目の単語に変更したため、簡単な解決策は消えました。 (同様の質問でこのサイトを検索しましたが、答えはすべて値の安定した場所に関連していました。この場合、OSバージョンがどのフィールド番号にあるのかわかりません。)

例:

Red Hat Enterprise Linux Server release 6.10 (Santiago)
Red Hat Enterprise Linux Server release 7.9 (Maipo)
Red Hat Enterprise Linux release 8.6 (Ootpa)
Red Hat Enterprise Linux release 8.5 (Ootpa)

私は使用するのがsed最善の選択だと思います。

  1. 6.7.orで始まる最初の単語を見つけて8.値([678]\.)を取得します。おそらくこれが最も安全でしょう。

  2. または捕まった後の最初の単語release

sedawk他のツールを使用してこれを行うための素敵で簡単な方法についての提案があると思います。

答え1

次のいずれかreleaseを解析できます。

/etc/os-releaseRHELは単に変数をインポートしてOSバージョンを提供できると思います。

source /etc/os-release; echo $VERSION_ID

また、他の便利なオペレーティングシステム関連の変数もたくさん含まれています。

答え2

次の目的で使用できますlsb_release

$ lsb_release -rs
8.6

lsb_release別の方法は解析する必要はありません。/etc/os-release(これは提案ですRHEL 9以上):

awk -F'[="]' '/VERSION_ID/ { print $3 }' /etc/os-release

答え3

次のようにして、文字列の最後のフィールドの前のフィールドを分離できます。

... awk '{print $(NF-1)}'

たとえば、

echo "Red Hat Enterprise Linux Server release 6.10 (Santiago)"|awk '{print $(NF-1)}'
6.10

echo "Red Hat Enterprise Linux release 8.5 (Ootpa)"|awk '{print $(NF-1)}'
8.5

答え4

cat file.txt
Red Hat Enterprise Linux Server release 6.10 (Santiago)
Red Hat Enterprise Linux Server release 7.9 (Maipo)
Red Hat Enterprise Linux release 8.6 (Ootpa)
Red Hat Enterprise Linux release 8.5 (Ootpa)

出力

awk '{for(i=1;i<=NF;i++){if($i ~ /[0-9]/){print $i}}}' file.txt
6.10
7.9
8.6
8.5

関連情報