Для підрахунку всіх випадків використовуйте -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
просто підраховується кількість рядків у вихідних даних.