grep — перечислите имя файла, где соответствие найдено

У меня есть набор .html файлов в каталоге. Я хочу просмотреть каждый файл и соответствовать шаблону (MD5). Все это достаточно легко. Проблема, я должен знать, в каком файле соответствие было найдено.

cat *.html | grep 75447A831E943724DD2DE9959E72EE31

Только возвращает содержание страницы HTML, где соответствие найдено, но оно не говорит мне файл, в котором это было найдено. Как я могу заставить grep показывать мне имя файла, где мое соответствие найдено?

31
задан 18 February 2015 в 23:07

6 ответов

grep -H 75447A831E943724DD2DE9959E72EE31 *.html
<час>
-H, --with-filename
              Print the file name for each match. This is
              the default when there is more than one file
              to search.
32
ответ дан 23 November 2019 в 00:43

Я использую этого все время для поиска файлов, содержащих строку, РЕКУРСИВНО в каталоге (который означает, пересекая любой sub sub sub папка) grep -Ril "yoursearchtermhere"

  • R должен искать рекурсивно (после символьных ссылок)
  • i, должен сделать его нечувствительным к регистру
  • l, должен только перечислить название файлов.

настолько отвечающий на Ваш вопрос grep -l '75447A831E943724DD2DE9959E72EE31' *.html сделает, но можно просто сделать grep -Ril '75447A831E943724DD2DE9959E72EE31' для поиска той строки, нечувствительной к регистру, в любом файле в любой подпапке

20
ответ дан 23 November 2019 в 00:43

Можно попробовать это

grep -rl '75447A831E943724DD2DE9959E72EE31' * > found.txt
7
ответ дан 23 November 2019 в 00:43
grep -r -H 75447A831E943724DD2DE9959E72EE31 *.html | awk -F : ' { print $1 } '

Альтернатива

grep -r -l 75447A831E943724DD2DE9959E72EE31 *.html

Выполнение выше будет искать рекурсивно в папке и подпапках и печатать путь файла...

2
ответ дан 23 November 2019 в 00:43

Ответ, отправленный Cyrus, является абсолютно надлежащим и является Правильным Путем <глоток> ТМ , чтобы сделать это с grep если мы только потребность найти файлы . Когда для имен файлов нужно к дополнительный парсинг или операции на подобранных именах файлов, мы можем обратиться к использованию while цикл с if оператор. Вот пример, куда список имен файлов прибывает из очень наиболее часто используемого find + while структура для безопасного парсинга имен файлов.

find -type f -name "*.html" -print0 | while IFS= read -r -d '' filename
do
    if grep -q 'PATTERN' "$filename"
    then
        printf "%s found in %s\n" 'PATTERN' "$filename"
        # Here we can insert another command or function
        # to perform other operations on the filename
    fi
done
0
ответ дан 23 November 2019 в 00:43

Я бы сделал так:

find . -type f -name=*.html -exec grep -H 75447A831E943724DD2DE9959E72EE31 {} \;
0
ответ дан 22 September 2020 в 11:08

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

Похожие вопросы: