これは私の最初の投稿です。ここは素晴らしい場所であり、私を大いに助けてくれます !
だから私はpcgrepを使っていて、自分のパターンでファイルをキャッチしたいと思っています。次のような正規表現に変数を使用しています。
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 ディストリビューションがある場合は、テストできます。
私の方から間違い探しを手伝っていただけないでしょうか?ありがとう。