当我搜索软件包列表时,我通常使用
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
另请注意,您可以通过按l(l
模仿视图)在 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
这使得对一组过滤的包应用操作变得更容易。