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 fgrepMy desired output:
grep 2.16-1 amd64 GNU grep, egrep and fgrep 0 1 Answer
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 fgrepSee 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. 1