выполнение 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, обозначает/означает??
Это - задание для 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