Você pode tentar algo assim:
apt-get -s upgrade | awk '/^Inst/ {print $2}' |
xargs apt-cache policy |
awk '/:$|^$/ && ! /Version table:/ {print "\n" $0 } ; /:\/\// { print $2 }'
A saída (executada agora no meu sistema sid debian) se parece com isto:
sqlite3:
http://my.local.mirror.redacted/debian
libsqlite3-0:
http://my.local.mirror.redacted/debian
libsqlite3-0:i386:
http://my.local.mirror.redacted/debian
python-newt:
http://my.local.mirror.redacted/debian
libnewt0.52:
http://my.local.mirror.redacted/debian
libruby:
http://my.local.mirror.redacted/debian
http://my.local.mirror.redacted/debian
mercurial:
http://my.local.mirror.redacted/debian
mercurial-common:
http://my.local.mirror.redacted/debian
http://my.local.mirror.redacted/debian
sysstat:
http://my.local.mirror.redacted/debian
libmilter1.0.1:
http://my.local.mirror.redacted/debian
Alguns dos pacotes têm dois URLs. Isso porque meu sistema é amd64 com i386 como uma arquitetura adicional, e esses pacotes têm as versões amd64 e i386 disponíveis para atualização.
Se você preferir ter a linha de saída completa, para que fique assim:
mercurial-common:
990 http://my.local.mirror.redacted/debian unstable/main amd64 Packages
990 http://my.local.mirror.redacted/debian unstable/main i386 Packages
depois, basta excluir { print $2 }
do segundo script awk
.