Как бы вы посчитали каждое вхождение термина во всех файлах в текущем каталоге? - и подкаталоги (?)
Я читал, что для этого вы бы использовали grep
; какая точная команда?
Кроме того, возможно ли это с какой-то другой командой?
command-line
files
directory
grep
Скажи мне почему
источник
источник
PCREs
не следует использовать, так как они являются экспериментальными-F
что, вероятно, будет быстрее.-F
вместо-P
. Спасибо за отличное предложение, обновление с использованием-F
, которое действительно подходит лучше здесь.grep -Rc [term] *
сделаю это.-R
Флаг означает , что вы хотите рекурсивно искать в текущем каталоге и всех его подкаталогах. Это*
селектор файлов, означающий: все файлы.-c
Флага делаетgrep
выводить только число вхождений. Однако, если слово встречается в одной строке несколько раз, оно считается только один раз.От
man grep
:Если у вас нет символических ссылок в вашем каталоге, нет никакой разницы.
источник
-c
флаг кgrep
. Тогда grep считает себя, и вам не нужноwc
--
раньше*
*
Будет расширяться только для не составляют скрытые, так что вы пропустите все те. Имеет больше смысла просто использовать "." так как вы все равно будете рекурсивно обрабатывать аргументы - и это получит точечные файлы. Большая проблема здесь заключается в том, что это может быть количество строк, а не количество вхождений слова. Если термин появляется несколько раз в одной строке, он будет учитываться только один раз как "grep -c"В небольшом скрипте Python:
count_string.py
.Запустите его из каталога с помощью команды:
Заметки
Объяснение:
источник
root
иf
для чего?root
путь к файлу, включая «над» текущим каталогом,f
это файл. В качестве альтернативыos.path.join()
можно использовать, но более многословно.n = n + open(f).read().count(s)
?Как вариант хорошего ответа @ kos, если вы заинтересованы в разбивке счетчиков, вы можете использовать
-c
переключатель grep для подсчета вхождений:источник