Другое предложение awk
awk '{gsub(/\[.+foo|\]/,"foo")}1' file
foo1 bar1
foo2 bar2
foo3 bar3
foo4 bar4
foo5 bar5
dpkg-query
не поддерживает фильтрацию по статусу, но может выводить статус пакетов, что позволяет их фильтровать:
dpkg-query -W -f='${Status}\t${package}\t${version}\t${architecture}\n' | grep "^install ok installed"
dpkg -l
основан на dpkg-query
и поэтому не может фильтровать по самому статусу.
aptitude
предоставляет более мощные параметры поиска и может использоваться для этого; см. Правильный способ получить список установленных пакетов, соответствующих шаблону? для получения подробной информации. Следующая команда отобразит имя пакета, версию и архитектуру всех установленных пакетов (и только установленных пакетов ):
aptitude search "~i" -F "%p%v#%E"
Обратите внимание, что имя пакета будет включать архитектуру, если она не соответствует основной архитектуре системы; например
zlib1g 1:1.2.11.dfsg-1 amd64
zlib1g:i386 1:1.2.11.dfsg-1 i386
Используемая вами команда указывает только пакет, номер версии и архитектуру и распечатывает все это независимо от статуса.
Если вы просто хотите показать установленные пакеты:
dpkg --list | grep ^ii
Статус будет указан в первом столбце, где ii
означает, что он установлен и ожидается. Канал в grep ^ii
показывает только пакеты с этим статусом.
Если вам просто нужны установленные пакеты с архитектурой amd64:
dpkg --list | grep "^ii.*amd64"
Будут напечатаны только те пакеты, которые содержат статус ii
и amd64
.
Чтобы сделать то же самое, используя awk
для печати только строк, в которых первый столбец имеет ii
, а четвертый —amd64
:
dpkg --list | awk '$1=="ii" && $4=="amd64"'