apt-file regex: найти несколько пакетов одновременно, используя или

Я хотел бы найти несколько пакетов в одном, используя шаблон соединения регулярного выражения с логическим или |.

Предполагая, что существуют два файла /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.

4
задан 31 August 2019 в 16:47

1 ответ

Проблема связана с источником файлов 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 не соответствует из-за пропавших без вести, ведущих наклонную черту в файле Содержания.


Приложение

  • как упомянуто N0rbert apt-file --regexp использует Регулярные выражения Perl
  • соответствующая часть из способного файла человека обрисовывает в общих чертах проблему этого вопроса в ОШИБКАХ, разделе QUIRKS

    Файлы Содержания не включают ведущую наклонную черту в пути. Это означает, что/bin/ls перечислен как bin/ls в файле Содержания. При поиске чего-то в каталоге верхнего уровня часто лучше опустить ведущую наклонную черту.

    Алгоритм поиска попытается работать вокруг ведущей наклонной черты, но это не будет работать во всех случаях. Как обходное решение, попытайтесь вытянуть ведущую наклонную черту к началу регулярных выражений. Например, используйте "/(?: usr/bin/vim|sbin/lvm)" вместо "/usr/bin/vim |/sbin/lvm".

7
ответ дан 1 December 2019 в 09:12

Другие вопросы по тегам:

Похожие вопросы: