编辑:Solved it我自己,这是一个命令语法错误,与regex无关。
我正在尝试匹配以下模式:

(.*)
<FilesMatch "(^\.ht|~$|\.bak$|\.BAK$|\.old$)">
(.*)
Order Allow,Deny Deny from all
(.*)
</FilesMatch>
(.*)
<DirectoryMatch "(/CVS/|.svn)">
(.*)
Order Allow,Deny Deny from all
(.*)
</DirectoryMatch>
(.*)

(.*) meaning anything

使用grep -P "regex"和此正则表达式:
<FilesMatch \"\(\^\\\.ht\|~\$\|\\\.bak\$\|\\\.BAK\$\|\\\.old\$\)\">(.*\n){1,}Order Allow,Deny Deny from all(.*\n){1,}<\/FilesMatch>(.*\n){1,}<DirectoryMatch \"\(\/CVS\/\|\.svn\)\">(.*\n){1,}Order Allow,Deny Deny from all(.*\n){1,}<\/DirectoryMatch>

在下面的示例文件上:
<FilesMatch "(^\.ht|~$|\.bak$|\.BAK$|\.old$)">
Order Allow,Deny Deny from all
</FilesMatch>
<DirectoryMatch "(/CVS/|.svn)">
Order Allow,Deny Deny from all
</DirectoryMatch>

根据regex101,它应该可以工作,但不可以,你知道怎么了吗?
谢谢你的帮助。

最佳答案

好吧,这是我自己的错,我用了grep -P "regex"而不是grep -P 'regex'
它也适用于pcregrep -M 'regex'
无论如何谢谢!

07-23 18:18