我想使用带有逻辑或的正则表达式连接模式一次搜索多个包|
。
假设这两个文件/usr/lib/apache2/modules/httpd.exp
并/usr/lib/apt/apt.systemd.daily
存在:
$ sudo dpkg -S /usr/lib/apache2/modules/httpd.exp
apache2-bin: /usr/lib/apache2/modules/httpd.exp
$ sudo dpkg -S /usr/lib/apt/apt.systemd.daily
apt: /usr/lib/apt/apt.systemd.daily
为什么apt-file search --regexp '/usr/lib/apache2/modules/httpd.exp|/usr/lib/apt/apt.systemd.daily'
只返回
apache2-bin: /usr/lib/apache2/modules/httpd.exp
该解决方案旨在用于优化 GNOME 构建工具jhbuild
。它应该适用于大量的 Ubuntu 版本。
问题与文件来源
apt-file
匹配有关。它使用/var/lib/apt/lists/中的Contents文件,其中不包含前导./
/
因此,只需跳过正则表达式中的前导就可以了。我还建议转义点\.
,因为 `.* 仅表示匹配任何字符。在这种情况下,它可能会给您预期的结果,但这只是因为没有其他匹配项。它起作用的原因
apache2-bin: /usr/lib/apache2/modules/httpd.exp
是因为apt-file
它正在处理前导斜杠并在搜索模式中删除它们。但这仅适用于模式的开头,它不识别or运算符,也不会从第二个搜索部分删除前导斜杠。第二个搜索部分
/usr/lib/apt/apt.systemd.daily
不匹配,因为Contents文件中缺少前导斜杠。附录
apt-file --regexp
使用Perl 正则表达式man apt-file的相关部分在BUGS, QUIRKS部分概述了这个问题的问题