Pcregrep включает ошибку расширения файла

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

pcregrep -Mrl --include=*.sv -e '<my_multi-line_pattern>' /path/to/search

Тем не менее, это выдает ошибку: pcregrep: Error in 'include' regex at offset 0: nothing to repeat,

Я пытался убежать и дважды убежать * но безрезультатно. Этот синтаксис отлично работает для grep

grep -rl --include=*.sv '<my_single-line_pattern>' /path/to/search

Любая помощь или советы с благодарностью.

РЕДАКТИРОВАТЬ: Пример многострочного шаблона: '(?s)^\salu.*\.opa_i('должен соответствовать

alu u_alu(
     ...
   .opa_i(opa),
   .opb_i(opb),
     ...
)

1 ответ

Решение

Вот что говорят о документах pcregrep --include (выделение мое):

--include=pattern Если есть --include указаны шаблоны, единственные файлы, которые обрабатываются, это те, которые соответствуют одному из шаблонов (и не соответствуют --exclude шаблон). Этот параметр не влияет на каталоги, но он применяется ко всем файлам, перечисленным в командной строке, полученным из --file-list или путем сканирования каталога. Шаблон является регулярным выражением PCRE и сопоставляется с конечным компонентом имени файла, а не со всем путем. -F, -w, а также -x параметры не применяются к этому шаблону. Опция может быть предоставлена ​​любое количество раз. Если имя файла совпадает с - -include и --exclude шаблон, это исключено. Для этой опции нет краткой формы.

И * в начале регулярное выражение, конечно, не действует.
Теперь вы можете разобраться в сообщении об ошибке:)

Решение: --include='.*\.sv$' или просто --include='\.sv$'

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