1

这是我在这里的第一篇文章,这是个好地方,对我有很大帮助!

所以我正在使用 pcregrep,我想用我的模式捕获文件。我正在为正则表达式使用变量,例如:

test="<\?php\n.*. = Array\(('.'=>'.', ){20,}.*\);\nfunction .*\(.*, .*\).*for\(.i=0; .i .*\nreturn base64_decode(.*);}\n.* ('.*'.\n){10,}.*"

然后搜索文件:

find . -type f -name "*.php1" -print0 | xargs -0 pcregrep --colour=auto -M "$test"

您可以在此处找到要匹配的 test.sh(我正在使用的 bash 文件)和 *.php1 文件:http: //sendrev.com/stackoverflow/

当我运行 sh test.sh 它总是找到行(我看到它是彩色的,因为我正在使用--colour=auto):

'yzr3YEca5VacRthC6tGoXNkS2n8S2n8S2n8S2n8S2n8S4wUSFBc9FhGcqtcP6JTk4J0kj5TOMZ0yYmL'. 

(或其他,但不显示文件结尾)

我无法匹配更多的行,我不明白为什么。我想将最后一行与以下内容匹配:

"eval\(.*(.*, .*\)\);\?>$"

或者

"\)\);\?>"

但我不能去那条线。如果我将 "));\?>" 添加到 "test" 变量的末尾,则找不到任何内容,因为它无法转到最后一行。

!!!重要的是,如果行'.*'.数远少于一切都可以。看起来有一些我无法理解的限制。

如果你有 CentOS 或其他 linux 发行版,你可以测试它。

你能帮我从我这边搜索错误吗?谢谢。

4

1 回答 1

0

好的,我在不更改正则表达式的情况下使用这种类型的搜索找到了另一个解决方案(grep):
find . -type f -name "*.php" -print0 | xargs -0 grep --colour -Pzo "$test1"

说明:
-P为 grep 激活 perl-regexp(常规扩展的强大扩展)
-z在行尾抑制换行,将其替换为空字符。
也就是说,grep 知道行尾在哪里,但将输入视为一条大行。
-o仅打印匹配。

我认为这对我来说没问题,但是为什么它不能与 pcregrep 一起使用是个谜。

于 2015-04-11T03:49:05.353 回答