Количество файлов, содержащих данную строку


Ответы:


30

grep -l "string" * | wc -l будет искать «строку» в содержимом всех файлов в рабочем каталоге и сообщит вам, сколько совпадений.


1
Это не будет работать, если в каталоге много файлов, будет выдано сообщение об ошибке «zsh: список аргументов слишком длинный: grep». Есть идеи как избавиться от этого?

1
@ user16142 grep каталог вместо файлов: grep -lr "string" directory | wc -lесли вы не хотите рекурсивного поиска, вы можете использовать опцию find with maxdepth: find directory -maxdepth 1 -type f -exec grep -l "string" {} + | wc -lобратите внимание, что этот второй параметр медленнее, чем grep.
Агаргара

9

grepПараметр s -lбудет выводить только имена файлов, которые совпадают $PATTERN, wcможет посчитать их потом.

grep -l "$PATTERN" * | wc -l

спасибо, но было интересно с шаблоном в файле ... извините за неоднозначный вопрос

Если так, примите ответ Вольфа.
wag

3
awk '/pattern_to_look_for/ {s+=1; nextfile;} END {print s}' *

Пояснение: это ищет количество файлов, которые имеют "pattern_to_look_for" в их содержании, а не в их именах файлов (как ответ Wag). По твоему вопросу сложно сказать, что ты ищешь.


Но чего-то не хватает? потому что не работает

Если вы ищете строку утка, вы должны написать как / Duck / в Awk. Ты это делаешь?
Ян Перссон

да, вывод: awk: ошибка чтения (это каталог)

Ответ волка даст вам дубликаты. Если в одном из файлов есть несколько вхождений искомой строки, это будет считаться дополнительным совпадением.
Ян Перссон

Что ж, если у вас есть каталоги в папке, вы должны сделать некоторые дополнительные вещи, такие как замена звезды на что-то вроде этого find . ! -name . -prune -type f(не пропустите галочки). Эта команда перечисляет только файлы в папке.
Ян Перссон

2

Это работает в Bash с любым именем файла:

grep -lZ "$pattern" * | tr -cd '\000' | wc -c

Объяснение:

  • grep-ZОпция 's печатает каждый результат с ␀-байтовым разделителем. Этот символ не может быть частью имени файла, поэтому мы можем просто посчитать количество разделителей, чтобы получить количество файлов.
  • Чтобы избавиться от других символов в выводе, мы просто удаляем все, кроме ␀ байтов, используя tr.
  • Затем просто посчитайте символы с wc.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.