Чтобы подсчитать все вхождения, используйте -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
просто подсчитывает количество строк в выводе.