2

Как я могу объединить find и grep для поиска str1 или str2 , рекурсивно, во всех файлах * .html и * .php, начиная с каталога с именем /home /smith /source? Выходные данные должны только перечислить файлы (с путем), а не фактическую совпавшую строку. Я попробовал много вариантов без успеха. Есть много примеров того, как сделать это для одного шаблона файла или одной строки, но не для нескольких шаблонов файла и нескольких строк - рекурсивно.

5 ответов5

4

Другие все верны, но с современной версией grep, на мой взгляд, они излишни. Следующее будет рекурсивно проверять только файлы с расширениями .html или .php и возвращает имя файла с путем к каждому файлу, по крайней мере, с одной строкой, совпадающей либо с str1, либо с str2. Обратите внимание, что повторяющиеся опции -e позволяют указывать несколько путей без использования синтаксиса регулярных выражений.

grep -r --files-with-matchs --include ' .html' --include '.php' -e str1 -e str2 /home /smith /source

Один инструмент, один процесс, без лишних разветвлений или сканирования ненужных файлов. Просто требуется относительно недавняя версия gnu grep для параметра --include, в противном случае вам придется выполнить многоступенчатый grep, как предложили другие.

3
egrep 'string1|string2' /home/smith/source/*.{html,php}

или рекурсивно просматривая любой тип файла в каталоге,

egrep -R 'string1|string2' /home/smith/source

Вы можете объединить это с другим egrep в трубе:

egrep -R 'string1|string2' /home/smith/source | egrep '.html|.php'
1

Если вы используете ack (см. Http://beyondgrep.com), вы можете сделать это:

ack --php --html -l 'str1|str2' /home/smith/source
1

Используйте egrep и используйте | указать str1 или str2-:

find /home/smith/source -name \*.html -o -name \*.php -exec egrep -H 'str1|str2' {} \;
0

Не забывайте, что ваша оболочка намного удобнее, чем find если вы хотите найти файлы только по имени!

Bash:

shopt -s nullglob globstar
grep -lE 'str1|str2' /home/smith/source/**/*.{html,php}

Рыба:

grep -lE 'str1|str2' /home/smith/source/**.{html,php}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .