
Когда я запускаю команду grep:
grep -rc 'PATTERN' .
он выводит количество строк, в которых встречается шаблон, но выглядит он так:
./hotel_232424.dat:234
и так далее...
Как мне снять деталь ./hotel_232424.dat:
и просто распечатать номер?
решение1
В реализации GNU для этого grep
есть опция -h
/ --no-filename
.
$ grep -rc PATTERN .
./b:1
./a:0
./1/2/c:2
$ grep -rhc PATTERN .
1
0
2
Портативный/стандартный эквивалент будет следующим:
$ find . -type f -exec grep -c PATTERN {} \;
0
2
1
но это означало бы выполнение одного grep
вызова для каждого файла.
Если вместо этого вам нужно общее количество вхождений (здесь 1+2 = 3), вы можете сделать (переносимо):
$ find . -type f -exec cat {} + | grep -c PATTERN
3
(обратите внимание, что если в некоторых файлах после последней строки есть данные (то есть нетекстовые файлы), это может испортить результат)
Или, с такой grep
поддержкой -r
, как у вас:
$ grep -r PATTERN . | wc -l
3