Aby policzyć wszystkie wystąpienia, użyj -o
. Spróbuj tego:
echo afoobarfoobar | grep -o foo | wc -l
I man grep
oczywiście (:
Aktualizacja
Niektórzy sugerują użycie po prostu grep -co foo
zamiast 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 -o
jest tutaj ignorowany i możesz po prostu użyć grep -c
zamiast 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 -l
zlicza tylko liczbę wierszy w wyniku.