リリースとバージョンのみを取得するbashコマンド

リリースとバージョンのみを取得するbashコマンド

conkyに入るためにディストリビューション名とバージョン番号を取得しようとしています。現在、以下を使用しています

rpm --query centos-release

~につながる

centos-release 7-4.1708.e17.centos.x86_64

どのように減らすことができますかcentos 7-4.1708.e17

すべての提案を試した後、ついにこれを私のconkyに入力しました。

${font Roboto:bold:size=8}${goto 95}${color1}Distribution $alignr   ${execi > 60 a=$(rpm --query centos-release)
a=${a#centos-release }
a=${a%%\.centos.*}
echo "$a"}

この結果、

centos-release-7-4.1708.e17

答え1

カスタム形式でRPMパッケージの名前と詳細を印刷するより一般的な方法は、コマンドまたは--qfオプション--queryformatを使用することですrpm

man rpm部分引用:

クエリ形式は、標準の printf(3) 形式の修正バージョンです。形式は、静的文字列(改行、タブ、およびその他の特殊文字の標準C文字エスケープを含めることができます)とprintf(3)型フォーマッタで構成されます。 rpmは印刷するタイプを既に知っているので、タイプ指定子を省略し、{}文字で囲まれた印刷するヘッダータグの名前に置き換える必要があります。タグ名は大文字と小文字を区別しません。

rpmを実行すると、既知のタグ名のリストを表示できますrpm --querytags。これは長いリストなので、ここでは内容全体を再現しません。しかし、いくつかの興味深いタグは次のとおりです。

name
n
version
v
release
r
arch
nvra
nvr
description

残念ながらあなたには精密ユースケースでは、name関連パッケージはであり、期待を満たしていcentos-releaseません。centosrelease4.1708.el7.centos

したがって、純粋なクエリ形式を使用して必要なものに最も近い出力は次rpmのようになります。

rpm -q centos-release --qf 'centos %{v}-%{r}\n'

("centos" は "centos-release" で拡張されたラベルの代わりに静的文字列を使用します%{n}。また、タイプミスかもしれませんが、必要な出力の空白も記録してください。)

[マイテスト]ボックスで、このコマンドは次のように生成します。

$ rpm -q centos-release --qf 'centos %{v}-%{r}\n'
centos 7-2.1511.el7.centos.2.10
$ 

答え2

sedを使用してください:

$ rpm --query centos-release | sed 's/^centos-release//;s/\.centos.*//'
7-4.1708.e17

ケースのみを含む:

#!/bin/sh

a=$(rpm --query centos-release)
a=${a#centos-release }
a=${a%%\.centos.*}
echo "$a"

答え3

centos-releaseバージョンと番号の間にダッシュ(またはスペース)がある場合は、次のことができます。

  • seds/^centos-release.//()を使用して "centos-release-"を ""に置き換えます。
  • ".centos.*" を ""( s/\.centos.*//) に置き換えます。
  • 標準出力にはバージョンのみが表示されます。

$ rpm --query centos-release
centos-release-7-4.1708.el7.centos.x86_64

$ rpm --query centos-release | sed 's/^centos-release.//;s/\.centos.*//'
7-4.1708.el7

関連情報