Remova o nome do arquivo ao contar recursivamente o número de ocorrências de um padrão

Remova o nome do arquivo ao contar recursivamente o número de ocorrências de um padrão

Quando executo meu comando grep:

grep -rc 'PATTERN' .

ele imprime o número de linhas em que o padrão ocorre, mas fica assim:

./hotel_232424.dat:234

e assim por diante...

Como eu removeria a ./hotel_232424.dat:peça e apenas imprimiria o número?

Responder1

Com a implementação GNU do grep, você tem a opção -h/ --no-filenamepara isso.

$ grep -rc PATTERN .
./b:1
./a:0
./1/2/c:2
$ grep -rhc PATTERN .
1
0
2

O equivalente portátil/padrão seria:

$ find . -type f -exec grep -c PATTERN {} \;
0
2
1

mas significaria executar uma grepinvocação por arquivo.

Se, em vez disso, você quiser o número total de ocorrências (1+2 = 3 aqui), poderá fazer (portavelmente):

$ find . -type f -exec cat {} + | grep -c PATTERN
3

(observe que se alguns dos arquivos tiverem dados após a última linha (ou seja, arquivos que não sejam de texto), isso poderá atrapalhar o resultado)

Ou, com um grepsuporte -rcomo o seu:

$ grep -r PATTERN . | wc -l
3

informação relacionada