我想从包名称中仅提取包的版本。假设我有一个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