Чтобы сосчитать все вхождения, используйте -o
.Попробуйте это:
echo afoobarfoobar | grep -o foo | wc -l
И man grep
конечно (:
Обновление
Некоторые предлагают использовать просто grep -co foo
вместо grep -o foo | wc -l
.
Не.
Этот ярлык работает не во всех случаях. Страница руководства гласит:
-c print a count of matching lines
Разница в этих подходах показана ниже:
1.
$ echo afoobarfoobar | grep -oc foo
1
Как только совпадение найдено в строке в строке (a{foo}barfoobar
), поиск прекращается. Была проверена только одна строка, и она совпала, поэтому вывод 1
. На самом деле -o
здесь игнорируется, и вы можете просто использовать grep -c
.
2.
$ echo afoobarfoobar | grep -o foo
foo
foo
$ echo afoobarfoobar | grep -o foo | wc -l
2
В строке найдено два совпадения (a{foo}bar{foo}bar
), потому чтомы явно просили найти каждое вхождение (-o
). Каждый случай печатается в отдельной строке, а wc -l
просто подсчитывает количество строк в выводе.