Ubuntu 18 上的 dpkg 和 egrep

Ubuntu 18 上的 dpkg 和 egrep

尝试使用dpkgegrep命令列出名称以q.已经尝试过:

dpkg -l | egrep -l q
dpkg -l | egrep -l ^q
dpkg -l | egrep q
dpkg -l | grep q

出了什么问题?

答案1

使用--get-selections而不是-l选项:

dpkg --get-selections |grep ^q

或者使用awk更改列顺序:

dpkg -l |awk '{print $2 , $3 "\t\t" $1}' | grep ^q

答案2

您实际上根本不需要 grep (或 egrep):该dpkg -l命令接受一个模式:

-l, --list package-name-pattern...
    List packages matching given pattern.

请注意,这package-name-pattern是一个全局模式而不是正则表达式。所以

dpkg -l 'q*'

如果您希望以更可配置的格式输出(例如,仅二进制包名称),那么您可以使用dpkg-queryex.

dpkg-query -Wf '${binary:Package}\n' 'q*'

答案3

egrep 的正则表达式与 的预期输出不匹配dpkg -l。如果您希望保持与 相同的输出格式dpkg -l,其中包括包的状态、版本和描述,则需要更改正则表达式以匹配预期格式:行开头的三个字符(描述系统上包的状态)以及包名称前的空格。

在表达式 中^... [qQ]^表示从行首开始匹配,...表示匹配后跟空格的任意三个字符,然后q匹配以大写或小写“q”开头的包(在 Ubuntu 上包只能是小写,但也有可能是不遵循这些规则的自定义包)。

$ dpkg -l | egrep '^... [qQ]'
ii  qdbus                                         4:4.8.7+dfsg-7ubuntu1                        amd64        Qt 4 D-Bus tool
ii  qemu-block-extra:amd64                        1:2.11+dfsg-1ubuntu7.19                      amd64        extra block backend modules for qemu-system and qemu-utils
...

相关内容