Как Вы считали бы каждое возникновение термина во всех файлах в текущем каталоге? - и подкаталоги (?)
Я считал, что, чтобы сделать это Вы использовали бы grep
; какова точная команда?
Кроме того, действительно ли это возможно к вышеупомянутому с некоторой другой командой?
Используя grep
+ wc
(это обслужит несколько происшествий термина на той же строке):
grep -rFo foo | wc -l
-r
в grep
: поиски рекурсивно в иерархии текущего каталога;-F
в grep
: соответствия против фиксированной строки вместо против шаблона;-o
в grep
: печать только соответствует;-l
в wc
: печатает количество строк;% tree
.
├── dir
│ └── file2
└── file1
1 directory, 2 files
% cat file1
line1 foo foo
line2 foo
line3 foo
% cat dir/file2
line1 foo foo
line2 foo
line3 foo
% grep -rFo foo | wc -l
8
В качестве варианта хорошего ответа @ kos, если вы заинтересованы в разбивке счетчиков, вы можете использовать переключатель -c
grep для подсчета случаев:
$ grep -rFoc foo
file1:3
dir/file2:3
grep -Rc [term] *
сделает это. -R
флаг означает, что Вы хотите рекурсивно искать текущий каталог и все его подкаталоги. Эти *
значение селектора файла: все файлы. Эти -c
флаг заставляет grep
произвести только количество случаев. Однако, если слово происходит многократно на одной строке, это считается только однажды.
От man grep
:
-r, --recursive
Read all files under each directory, recursively, following symbolic links only if they are on the command line.
This is equivalent to the -d recurse option.
-R, --dereference-recursive
Read all files under each directory, recursively. Follow all symbolic links, unlike -r.
, Если у Вас нет символьных ссылок в Вашем каталоге, нет никакого различия.
В маленьком сценарии Python:
#!/usr/bin/env python3
import os
import sys
s = sys.argv[1]
n = 0
for root, dirs, files in os.walk(os.getcwd()):
for f in files:
f = root+"/"+f
try:
n = n + open(f).read().count(s)
except:
pass
print(n)
count_string.py
.Выполните его из каталога с командой:
python3 /path/to/count_string.py <term>
# get the current working directory
currdir = os.getcwd()
# get the term as argument
s = sys.argv[1]
# count occurrences, set start to 0
n = 0
# use os.walk() to read recursively
for root, dirs, files in os.walk(currdir):
for f in files:
# join the path(s) above the file and the file itself
f = root+"/"+f
# try to read the file (will fail if the file is unreadable for some reason)
try:
# add the number of found occurrences of <term> in the file
n = n + open(f).read().count(s)
except:
pass
print(n)