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

0

Quando eu executo meu comando grep:

grep -rc 'PATTERN' .

imprime o número de linhas que o padrão ocorre, mas é assim:

./hotel_232424.dat:234

e assim por diante ...

Como eu removerei a parte ./hotel_232424.dat: e apenas imprimo o número?

    
por tom 11.02.2016 / 15:11

1 resposta

2

Com a implementação GNU de grep , você tem a opção -h / --no-filename para 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 invocação de grep por arquivo.

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

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

(observe que, se alguns arquivos tiverem dados após a última linha (portanto, arquivos que não são de texto), isso pode atrapalhar o resultado)

Ou com um grep suportando -r como o seu:

$ grep -r PATTERN . | wc -l
3
    
por 11.02.2016 / 15:20