Как проверить длинные файлы с повторяющимися строками, используя pcregrep

Это мой первый пост здесь, это отличное место, и оно мне очень помогает!

Поэтому я использую 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/stackru/

Когда я запускаю sh test.sh, он всегда находит строки в (я видел его в цвете, потому что я использую --colour=auto):

'yzr3YEca5VacRthC6tGoXNkS2n8S2n8S2n8S2n8S2n8S4wUSFBc9FhGcqtcP6JTk4J0kj5TOMZ0yYmL'. 

(или другой, но не показывает конец файла)

Я не могу сопоставить больше строк из этого, и я не могу понять, почему. Я хочу сопоставить последнюю строку с чем-то вроде:

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

или же

"\)\);\?>"

но я не могу пойти на эту линию. Если я добавлю "));\?>" В конец переменной "test", то ничего не будет найдено, потому что она не может перейти к последней строке.

!!! Importnat в том, что если строки с '.*'. гораздо меньше, чем все в порядке. Похоже, есть ограничение, которое я не могу понять.

Вы можете проверить это, если у вас есть CentOS или другой дистрибутив Linux.

Можете ли вы помочь в поиске ошибок с моей стороны? Благодарю.

1 ответ

Хорошо, я нашел другое решение (grep) с этим типом поиска без изменения регулярного выражения:
find . -type f -name "*.php" -print0 | xargs -0 grep --colour -Pzo "$test1"

Объяснение:
-P активировать perl-regexp для grep (мощное расширение регулярных расширений)
-z подавить символ новой строки в конце строки, подставив его для нулевого символа.
То есть grep знает, где находится конец строки, но видит входные данные как одну большую строку.
-o печатать только соответствующие.

Я думаю, что это нормально для меня, но это загадка, почему он не работает с pcregrep.

Другие вопросы по тегам