Pcregrep包含文件扩展名bug

时间:2017-03-30 16:30:49

标签: regex linux grep 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

我试过逃避&amp;双重逃避*无济于事。这种语法似乎适用于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 个答案:

答案 0 :(得分:1)

以下是pcregrep's docs--include所说的内容(强调我的):

  

--include=pattern 如果指定了任何--include模式,则处理的唯一文件是与其中一个模式匹配的文件(并且与{{1}不匹配模式)。此选项不会影响目录,但它适用于所有文件,无论是在命令行中列出,从--exclude获取,还是通过扫描目录。 模式是PCRE正则表达式,并且与文件名的最终组件匹配,而不是整个路径。 --file-list-F-w选项不适用于此模式。该选项可以被赋予任意次数。如果文件名与 - -x-include模式匹配,则会将其排除。此选项没有简短形式。

正则表达式开头的--exclude当然 无效。
现在您可以理解错误消息:)

解决方案:*--include='.*\.sv$'