/ / Recursive Grep, aby wyświetlić tylko łączną liczbę matchin - bash, shell, grep

Rekursywny Grep, aby wyświetlić tylko łączną liczbę matchin - bash, shell, grep

Próbuję wykonać rekursywne wyszukiwanie grep, takie jak:

grep -r -c "foo" /some/directory

które dają mi wyjście takie jak:

/some/directory/somefile_2013-04-08.txt:0
/some/directory/somefile_2013-04-09.txt:1
/some/directory/somefile_2013-04-10.txt:4
...etc

jednak chciałbym uzyskać całkowitą liczbę dopasowań we wszystkich plikach, takich jak:

Total matches:    5

Grałem z kilkoma innymi przykładami, takimi jak w tym wątku, chociaż nie mogę zrobić tego, co powinno być takie proste.

Odpowiedzi:

21 dla odpowiedzi № 1
grep -ro "foo" /some/directory | wc -l | xargs echo "Total matches :"

The -o opcja grep drukuje wszystko istniejące wystąpienia ciągu znaków w pliku.


4 dla odpowiedzi nr 2

Po prostu przejdź do grep.

grep -r "foo" /some/directory | grep -c "foo"

3 dla odpowiedzi nr 3
matches=$(grep -rch "foo" /some/directory | paste -sd+ - | bc)
echo "Total matches: $matches"

Fragment wklej / bc podsumowuje listę liczb. Widzieć: Komenda Bash służąca do sumowania kolumny liczb.


1 dla odpowiedzi nr 4

Jeśli potrzebujesz tylko sumy, możesz pominąć uzyskiwanie liczby dla każdego pliku i po prostu uzyskać całkowitą liczbę dopasowanych linii:

grep -r "foo" /some/directory | wc -l