我正在尝试获取要进入 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
符合预期,并且release
是4.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