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,不centos符合预期,并且release4.1708.el7.centos

因此,使用纯查询格式最接近所需的输出rpm是:

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

(请注意“centos”使用静态字符串而不是标签%{n},它将扩展为“centos-release”。另请注意所需输出中的空格,尽管这可能是一个拼写错误。)

在我的测试盒上,此命令会生成:

$ 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如果您的版本和数字之间有破折号(或空格),您可以...

  • sed使用( )将“centos-release-”替换为“”s/^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

相关内容