"uname -rv"(または同様のツール)からカーネルバージョンとビルド日付を抽出するディストリビューションに依存しない方法

多くの人が知っているように、バージョン(ビルドフラグ、日付)でuname -rカーネルバージョンを返します。uname -v

次のように、リリースとビルドの日付のみを出力する方法を見つけようとします。

4.10.0-37-generic Fri Oct 6 22:42:22 UTC 2017

使ったらuname -rv手に入れる

4.10.0-37-generic #41~16.04.1-Ubuntu SMP Fri Oct 6 22:42:22 UTC 2017

したがって、ここで必要なのは、削除するパターンを見つけることです#41~16.04.1-Ubuntu SMP。ソリューションの唯一の制限は次のとおりです。

  • 1行で実行可能でなければなりません。
  • システムのロケールは米国(または週と月が英語で印刷される別の英語ロケール)です。
  • これは、Linuxディストリビューションおよびディストリビューションスイートとは独立したソリューションでなければなりません。uname私の知る限り、これはDebian、Red Hat、Slackware、Archなど、すべてのLinuxディストリビューションに存在する最も基本的なツールだからです。 「すべての」ディストリビューションに他のツールがある場合は、そのディストリビューションで使用できます。
  • 焦点はLinuxにあり、これはBSDソリューション(MacOSを含む)が関連していないことを意味します。

問題は、コマンドに慣れていないことです。特に、日付の印刷方法が均一な場合は、最初のスペース(左から右へ)から6番目のスペース(含む、右から左へ)が、日付に5つのスペースが含まれている場合にのみ機能します。

<day of the week> <month> <day of the month> <daytime (HH:MM:SS)> <time standard/time zone> <Year>

uname -rv私が考慮したもう一つのことは、との出力の間にミューテックスを使用することですcat /proc/version

Linux version 4.10.0-37-generic (buildd@lcy01-30) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) ) #41~16.04.1-Ubuntu SMP Fri Oct 6 22:42:22 UTC 2017
              |_______________|                                                                                                        |_________________________|


4.10.0-37-generic #41~16.04.1-Ubuntu SMP Fri Oct 6 22:42:22 UTC 2017
|_______________|                       |_________________________|

ここでも正規表現はオプションでなければなりませんが、上記のように日付形式が均一であるかどうかわからないため、正規表現を作成するのは非常に困難です(IMHO)。ここでは、uname -v日付間の部分文字列がシステムごとに非常に異なる可能性があるさまざまなプロパティを追加することもできます。#

ベストアンサー1

sedメソッドがあります。

uname -rv | sed -e 's/\s#.*SMP//'

Fedora / RHELでこれを試してみましたが、うまくいくようです。

おすすめ記事