Aby policzyć wszystkie wystąpienia, użyj -o. Spróbuj tego:
echo afoobarfoobar | grep -o foo | wc -l
I man grepoczywiście (:
Aktualizacja
Niektórzy sugerują użycie po prostu grep -co foozamiast grep -o foo | wc -l.
Nie.
Ten skrót nie będzie działał we wszystkich przypadkach. Strona podręcznika mówi:
-c print a count of matching lines
Różnicę między tymi podejściami przedstawiono poniżej:
1.
$ echo afoobarfoobar | grep -oc foo
1
Po znalezieniu dopasowania w linii ( a{foo}barfoobar) wyszukiwanie zatrzymuje się. Tylko jedna linia została sprawdzona i pasowała, więc wynik jest 1. Właściwie -ojest tutaj ignorowany i możesz po prostu użyć grep -czamiast tego.
2.
$ echo afoobarfoobar | grep -o foo
foo
foo
$ echo afoobarfoobar | grep -o foo | wc -l
2
W linii ( a{foo}bar{foo}bar) znaleziono dwa dopasowania, ponieważ wyraźnie poprosiliśmy o znalezienie każdego wystąpienia ( -o). Każde wystąpienie jest drukowane w osobnym wierszu i wc -lzlicza tylko liczbę wierszy w wyniku.