Я хотел бы найти несколько пакетов в одном, используя шаблон соединения регулярного выражения с логическим или |
.
Предполагая, что существуют два файла /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/, которые не содержат продвижение /
.
# lz4cat /var/lib/apt/lists/de.archive.ubuntu.com_ubuntu_dists_bionic_Contents-amd64.lz4 | grep httpd.exp
usr/lib/apache2/modules/httpd.exp httpd/apache2-bin
usr/share/doc/lighttpd/expire.txt universe/web/lighttpd-doc
Поэтому просто пропустите продвижение /
в Вашем regexp и Вы в порядке. Я также рекомендовал бы выйти из точек \.
с тех пор '.* только означает соответствовать любому символу. В этом случае это могло бы дать Вам ожидаемые результаты, но только потому, что нет никаких других соответствий.
# apt-file search --regexp 'usr/lib/apache2/modules/httpd\.exp|usr/lib/apt/apt\.systemd\.daily'
apache2-bin: /usr/lib/apache2/modules/httpd.exp
apt: /usr/lib/apt/apt.systemd.daily
Причина, почему это действительно работало на apache2-bin: /usr/lib/apache2/modules/httpd.exp
то, потому что apt-file
заботится о продвижении наклонных черт и удаляет их в шаблоне поиска.
Но это только применяется к началу шаблона, и он не распознает или оператор и не удаляет ведущую наклонную черту со второй поисковой части. Вторая поисковая часть /usr/lib/apt/apt.systemd.daily
не соответствует из-за пропавших без вести, ведущих наклонную черту в файле Содержания.
Приложение
apt-file --regexp
использует Регулярные выражения Perlсоответствующая часть из способного файла человека обрисовывает в общих чертах проблему этого вопроса в ОШИБКАХ, разделе QUIRKS
Файлы Содержания не включают ведущую наклонную черту в пути. Это означает, что/bin/ls перечислен как bin/ls в файле Содержания. При поиске чего-то в каталоге верхнего уровня часто лучше опустить ведущую наклонную черту.
Алгоритм поиска попытается работать вокруг ведущей наклонной черты, но это не будет работать во всех случаях. Как обходное решение, попытайтесь вытянуть ведущую наклонную черту к началу регулярных выражений. Например, используйте "/(?: usr/bin/vim|sbin/lvm)" вместо "/usr/bin/vim |/sbin/lvm".