列出与字符串匹配的所有包的更短方法

列出与字符串匹配的所有包的更短方法

当我搜索软件包列表时,我通常使用

dpkg -l|grep string|cut -d" " -f3|xargs

libdouble-conversion3:amd64 libestr0:amd64 libeval-closure-perl libio-stringy-perl libunistring2:amd64 liburi-perl libustr-1.0-1:amd64 libwind0-heimdal:amd64 libxstring-perl php-mbstring php7.0-mbstring php7.4 -mbstring php8.2-mbstring

bash 中有没有更短的方法来获取此列表?

答案1

dpkg-query-W当使用而不是. 时,允许格式化输出-l

例如

dpkg-query -f='${binary:Package} ' -W  'pyth*'

将列出以空格开头的所有二进制包pyth并用空格分隔它们,必要时还包含它们的体系结构。

有关可能格式的更多详细信息,请参阅man dpkg-query.

它可能不一定更短,但您可以基于它定义一个别名,因此只需使用 REGEX 查询。

答案2

如果你只想学习可以搜索包的工具,你可以考虑aptitude谁的搜索语法极其用途广泛,可以让您根据有关已安装或未安装的软件包的许多标准进行搜索。

这里:

aptitude -q search -F %p '~i ^pyth'

将搜索已安装的软件包(~i, 短缺?installed)并且其名称与给定的正则表达式匹配(或的^pyth缩写~n^pyth?name(^pyth))。

-F %p指定输出格式,这里%p是包名称。

如果您想在一行上打印以空格分隔的列表,xargs( 的缩写xargs echo)不是合适的工具。代替使用paste -sd ' ' -。如果目的是将包列表传递给另一个命令:

dpkg/aptitude... | xargs -rd '\n' cmd --

尽管:

dpkg/aptitude... | xargs -r cmd

也应该有效,因为包名称通常不以 / 开头-,也不包含空格、引号或反斜杠字符,如果xargs没有-0/ ,这将是一个问题-d

如果命令是卸载/清除软件包,请注意您还可以执行以下操作:

aptitude remove '~i ^pyth'

aptitude另请注意,您可以通过按ll模仿视图)在 TUI 中进行相同的搜索,并在其中输入搜索规范,最好是在平面列表视图。然后,可以更轻松地查看这些包的详细信息并对这些包执行操作。第一次在系统上运行时我做的第一件事aptitude是更改默认设置选项->优先通过勾选:

    [X] Advance to the next item after changing the state of a package
    [X] Display flat view instead of default view on startup

这使得对一组过滤的包应用操作变得更容易。

相关内容