How to tweak "dpkg -l" output
I need the fields returned by dpkg -l to be tab separated but without the headers and the "ii" column.
The default output:
$ dpkg -l grep
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-==============-============-============-=================================
ii grep 2.16-1 amd64 GNU grep, egrep and fgrep
My desired output:
grep 2.16-1 amd64 GNU grep, egrep and fgrep
Solution 1:
dpkg
is not appropriate in your case, prefer the dpkg-query
command instead.
With the dpkg-query
you can select the type of fields you want (and optionally the separator):
$ dpkg-query -W -f='${binary:Package}\t${Version}\t${Architecture}\t${binary:Summary}\n' grep
grep 2.16-1 amd64 GNU grep, egrep and fgrep
See the dpkg-query man page for more options (especially the -f --showformat
option)
For reference:
-W, --show [package-name-pattern...]
Just like the --list option this will list all packages matching
the given pattern. However the output can be customized using
the --showformat option. The default output format gives one
line per matching package, each line having the name (extended
with the architecture qualifier for Multi-Arch same packages)
and installed version of the package, separated by a tab.
-f, --showformat=format
This option is used to specify the format of the output --show
will produce. The format is a string that will be output for
each package listed.
In the format string, “\” introduces escapes:
\n newline
\r carriage return
\t tab
“\” before any other character suppresses any special meaning of
the following character, which is useful for “\” and “$”.
Package information can be included by inserting variable refer‐
ences to package fields using the syntax “${field[;width]}”.
Fields are printed right-aligned unless the width is negative in
which case left alignment will be used. The following fields are
recognized but they are not necessarily available in the status
file (only internal fields or fields stored in the binary pack‐
age end up in it):
Architecture
Bugs
Conffiles (internal)
Config-Version (internal)
Conflicts
Breaks
Depends
Description
Enhances
Essential
Filename (internal, front-end related)
Homepage
Installed-Size
MD5sum (internal, front-end related)
MSDOS-Filename (internal, front-end related)
Maintainer
Origin
Package
Pre-Depends
Priority
Provides
Recommends
Replaces
Revision (obsolete)
Section
Size (internal, front-end related)
Source
Status (internal)
Suggests
Tag (usually not in .deb but in repository Packages files)
Triggers-Awaited (internal)
Triggers-Pending (internal)
Version
The following are virtual fields, generated by dpkg-query from
values from other fields (note that these do not use valid names
for fields in control files):
binary:Package
binary:Summary
db:Status-Abbrev
source:Package
source:Version
The default format string is “${binary:Package}\t${Version}\n”.
Actually, all other fields found in the status file (i.e. user
defined fields) can be requested, too. They will be printed as-
is, though, no conversion nor error checking is done on them.
binary:Package is a special field that will print the package
name with an architecture qualifier (like "libc6:amd64") if the
package has a Multi-Arch field with a value of same, and as such
its name could be ambiguous.