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 № 1grep -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