运行dpkg --list
给了我这个输出
ii ucf 3.0036 all Update Configuration File(s): preserve user changes to config files
ii udev 229-4ubuntu11 amd64 /dev/ and hotplug management daemon
ii ufw 0.35-0ubuntu2 all program for managing a Netfilter firewall
ii uidmap 1:4.2-3.1ubuntu5 amd64 programs to help use subuids
ii unattended-upgrades 0.90 all automatic installation of security upgrades
ii unzip 6.0-20ubuntu1 amd64 De-archiver for .zip files
现在让我们来举个例子,我们来看一下第三排ufw
在第三列中,版本号被重新写入,我不希望它返回0.35-0ubuntu2
。它应该只返回0.35-0
我该怎么做?
此外,这个额外的 ubuntu11 表示/意味着什么?
答案1
dpkg-query
这是一项需要手动格式化所需输出的工作,在我的系统上:
% dpkg-query -Wf '${Version}\n' ufw
0.34~rc-0ubuntu2
在这种情况下,特定dpkg-query
变量Version
扩展为所提及的包的版本。ufw
现在要获取之前的部分ubuntu2
,您可以设置之后的宽度Version
,并用以下方式分隔;
:
% dpkg-query -Wf '${Version;9}\n' ufw
0.34~rc-0
但这并不可靠,因为长度显然会因不同的可能版本而有所不同;因此您可以利用一些文本处理,这里是grep
-ping(您显然可以使用您选择的工具):
% dpkg-query -Wf '${Version}\n' ufw | grep -Po '.*?(?=ubuntu[^[:alpha:]]*$)'
0.34~rc-0
为了完整起见,如果您坚持使用dpkg -l
,请使用一点awk
:
% dpkg -l | awk '$2=="ufw" {sub("ubuntu[^[:alpha:]]*$", "", $3); print $3}'
0.34~rc-0