Ты рядом. Чтобы получить общее количество всех вхождений "ha" во всех TXT-файлах в папке:
grep -o "ha" *.txt | wc -l
От man grep
:
-o, --only-matching
Print only the matched (non-empty) parts of a matching line, with
each such part on a separate output line.
Это работает, потому что каждое совпадение печатается на отдельной строке, что позволяет wc -l
подсчитать их все.
Однако по умолчанию grep находит только первое вхождение в строке и выводит всю строку. Аналогично, опция -c
находит только первое вхождение во всех строках, а затем выводит, сколько строк имело 1 (или более) совпадений.
РЕДАКТИРОВАТЬ:
Вот способ напечатать общее количество вхождений в каждом отдельном файле (с именами файлов):
find *.txt -printf 'echo "$(grep -o "ha" %p | wc -l) %p";' | sh
#Example output
3 file1.txt
1 file2.txt
Объяснение:
find *.txt
- находит .txt файлы
-printf
- печатает все между одинарными кавычками (отформатированными) в стандартный вывод, заменяя вхождения %p
на вывод find (имена файлов)
$(grep -o "ha" %p | wc -l)
- работает как указано выше
| sh
- выходные данные из -printf
(которые являются командами) передаются в оболочку и выполняются
Обратите внимание, что printf вызывается один раз для каждого имени файла.