使用 bash 仅提取包名称的版本部分

使用 bash 仅提取包名称的版本部分

我想从包名称中仅提取包的版本。假设我有一个var包含包名称的变量(例如var="nfs-utils-1.2.6-6.fc17.i686.rpm":)。提取的字符串将为1.2.6-6.用于解析的方法可以是任何方法(正则表达式、awk、cut)。

编辑:在上面的例子中我实际上想提取1.2.6

答案1

这不是很便携,但对于这种特定情况,这grep是有效的:

echo $var | egrep -o '[0-9].*-[0-9]'
1.2.6-6

答案2

正如特里格所说,如果如果您要在安装这些软件包的同一系统上提取值,您可以直接向 RPM 询问版本:

ver=$(rpm --queryformat="%{VERSION}" -q nfs-utils)

答案3

最后 2 个“-”字符围绕版本。

因此,可以编写一个 *RE,用“$”锚定在字符串的末尾

例如

$ echo nfs-utils-1.2.6-6.fc17.i686.rpm | sed -e 's,.*-\([^-]*\)-[^-]*$,\1,'

1.2.6

相关内容