我使用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),
...
)
答案 0 :(得分:1)
以下是pcregrep's docs对--include
所说的内容(强调我的):
--include=pattern
如果指定了任何--include
模式,则处理的唯一文件是与其中一个模式匹配的文件(并且与{{1}不匹配模式)。此选项不会影响目录,但它适用于所有文件,无论是在命令行中列出,从--exclude
获取,还是通过扫描目录。 模式是PCRE正则表达式,并且与文件名的最终组件匹配,而不是整个路径。--file-list
,-F
和-w
选项不适用于此模式。该选项可以被赋予任意次数。如果文件名与 --x
和-include
模式匹配,则会将其排除。此选项没有简短形式。
正则表达式开头的--exclude
当然 无效。
现在您可以理解错误消息:)
解决方案:*
或--include='.*\.sv$'