Como ajustar a saída do dpkg -l

1

executando dpkg --list me dá essa saída

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

Agora, por ex. vamos pegar a terceira linha ufw

Na terceira coluna em que os números de versão foram gravados, não quero que ele retorne 0.35-0ubuntu2 . Deve devolver apenas 0.35-0 Como posso fazer isso?

Além disso, o que esse ubuntu11 extra denota / significa ??

    
por x0v 10.01.2017 / 09:43

1 resposta

0

Este é um trabalho para dpkg-query com formatação manual para a saída desejada, no meu sistema :

% dpkg-query -Wf '${Version}\n' ufw  
0.34~rc-0ubuntu2

A variável dpkg-query específicaVersion expande para a versão do pacote mencionado, ufw neste caso.

Agora, para obter a parte antes de ubuntu2 , você também pode definir a largura após Version , separado por ; :

% dpkg-query -Wf '${Version;9}\n' ufw
0.34~rc-0

mas isso não é confiável, pois o comprimento pode obviamente variar para diferentes versões possíveis; para que você possa aproveitar um pouco o processamento de texto, aqui grep -ping (obviamente você pode usar sua ferramenta de escolha):

% dpkg-query -Wf '${Version}\n' ufw | grep -Po '.*?(?=ubuntu[^[:alpha:]]*$)'
0.34~rc-0

Para completar, se você insistir em usar dpkg -l , use um pouco de awk :

%  dpkg -l | awk '$2=="ufw" {sub("ubuntu[^[:alpha:]]*$", "", $3); print $3}'
0.34~rc-0
    
por heemayl 10.01.2017 / 10:01