多くの人が知っているように、バージョン(ビルドフラグ、日付)で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でこれを試してみましたが、うまくいくようです。
答え2
私が見るには、スペースで区切られた2番目と3番目の列だけを削除したいようです。
$ uname -rv | cut -d ' ' -f 1,4-
4.4.0-87-generic Tue Jul 18 12:55:35 UTC 2017
cut
これは入力をスペースで区切られたフィールドとして解釈し、最初のフィールドと4番目から始まるすべてのフィールドを選択します。
答え3
どうですか?
echo $(uname -r)" "$(uname -v | sed -En 's/(^.*)((Mon)|(Tue)|(Wed)|(Thu)|(Fri)|(Sat)|(Sun).*$)/\2/p')
答え4
何について
echo "$(uname -r)$(uname -v | sed -nE 's/.*(( \S+){6})$/\1/p')"