Как проверить длинные файлы с повторяющимися строками, используя 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.