Tente
dpkg --get-selections | grep -v deinstall
Se você precisar da versão exata dos pacotes na saída, você pode fazer:
dpkg -l | grep '^ii' | awk '{print $2 "\t" $3}'
Isso só imprime as colunas 2 e 3. Isso também lista apenas pacotes instalados, não desinstalados ou outros.
Edit: Outra opção é o dpkg-query:
dpkg-query --show --showformat='${Package} ${Version} ${Architecture} ${db:Status-Abbrev} \n'
Onde --showformat (ou -f) define quais colunas você deseja exibir, neste caso o nome do pacote, versão e arquitetura e o status curto (por exemplo, "ii" e "rc") no final, o " \ n "é o quebra de linha.
A propósito, o "ii" define pacotes instalados, "rc" são pacotes desinstalados, é por isso que usei grep e awk para filtrar os pacotes desinstalados.
Se estiver com vontade, você pode adicionar larguras de coluna assim:
dpkg-query --show --showformat='${Package;-50} ${Version;-40} ${Architecture;-5} ${db:Status-Abbrev} \n'
Uma largura de coluna negativa significa que a orientação é deixada, positiva significa direita.
Tenha cuidado, pois o nome do pacote será interrompido se a largura for menor que o número de caracteres em um nome de pacote.
Não tenho certeza sobre qual finalidade você precisa da lista. Se você quer apenas ter uma lista que seja bem legível, não há nada errado com o awk ou outros comandos, se você quiser ter um "backup" do seu software para instalar em outra máquina, dpkg --get-selections
(sem nenhuma tubulação) é o caminho a percorrer, consulte link