0

我正在使用 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),
     ...
)
4

1 回答 1

3

这是pcregrep 的文档所说的--include(强调我的):

--include=pattern如果指定了任何--include模式,则处理的唯一文件是匹配其中一种模式(并且不匹配--exclude模式)的文件。此选项不影响目录,但适用于所有文件,无论是在命令行中列出的文件、从 获取的文件--file-list,还是通过扫描目录获得的文件。该模式是一个 PCRE 正则表达式,并且与文件名的最后一个组成部分匹配,而不是整个路径。、-F和选项不适用于此模式-w-x可以多次给出该选项。如果文件名同时匹配 --include--exclude模式,则将其排除。此选项没有简写形式。

*正则表达式开头的 a 当然是无效
现在您可以理解错误消息了:)

解决方案:--include='.*\.sv$'或者只是--include='\.sv$'

于 2017-03-30T16:46:01.373 回答