Регулярное выражение не соответствует файлу с помощью `find`, несмотря на то, что оно действительное [дубликат]

Для системы, использующей диспетчер пакетов RPM (yum), например (здесь) CentOS, используйте yum предоставляет или yum whatprovides :

provides or whatprovides
              Is used to find out which package provides some feature or
              file. Just use a specific name or a file-glob-syntax wildcards
              to list the packages available or installed that provide that
              feature or file.

Для pcresyntax вы можете попробовать:

yum whatprovides "*/pcresyntax"

Из документации RHL ,

yum предоставляет "* / имя_файла" является полезным способ найти пакеты, содержащие имя_файла.

Также посетите Как мне узнать, какой пакет rpm предоставляет файл, который я ищу?


Для системы на основе Debian / Ubuntu, в которой APT используется в качестве диспетчера пакетов по умолчанию, существует apt-file (спасибо @Gilles за указание) команда, которая может сделать то, что вы ищете.

DESCRIPTION
       apt-file is a command line tool for searching files in packages for the APT package management system.

search Search in which package a file is included. A list of all packages containing the  pattern  pattern  is returned.

Итак, используйте поиск apt-файлов , чтобы найти пакет, который включает файл, который вы ищете.


Другими словами, справочная страница предоставляется из файлов (обычно из / usr / share / man) и возможной копии . Как узнать, к какому (не установленному) пакету принадлежит файл? !

4
23.12.2016, 17:29
3 ответа

Вы, вероятно, ищете что-то вроде:

find . -name "*[a-z][A-Z]*"
4
27.01.2020, 20:49

Это происходит потому, что ([az]) ([AZ]) не соответствует ./ 250 - ErosPhiliaAgape.mp3 . Фактически, ([a-z]) ([A-Z]) может соответствовать только 2 символам - -regex - это привязанное соответствие по всему пути. Если вы хотите использовать -regex для поиска файла, имя которого содержит регулярное выражение, вы можете написать его так (синтаксис BSD / macOS find ):

find -E . -regex '.*/[^/]*([a-z])([A-Z])[^/]*'

Эквивалент поиска GNU будет выглядеть примерно так:

find . -regextype posix-extended -regex '.*/[^/]*([a-z])([A-Z])[^/]*'
1
27.01.2020, 20:49

Find -regex соответствует всему пути, а не только имени файла. Это означает, что для поиска / path / to / foo вам понадобится -regex '. * Foo' , а не только foo`. Вам нужно что-то вроде:

find  . -E -regex ".*[a-z][A-Z].*"

Было бы гораздо проще использовать глобусы и более простое -имя , как предложено SYN, однако вместо регулярных выражений.

3
27.01.2020, 20:49

Теги

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