Ответ 1
Вы можете использовать grep -o
, затем выполнить трубку через wc -l
:
$ echo "123 123 123" | grep -o 123 | wc -l
3
Я хочу подсчитать количество совпадений в одной строке (или всех строк, так как всегда будет только одна строка).
Я хочу считать не только одно совпадение в строке, как в
echo "123 123 123" | grep -c -E "123" # Result: 1
Лучший пример:
echo "1 1 2 2 2 5" | grep -c -E '([^ ])( \1){1}' # Result: 1, expected: 2 or 3
Вы можете использовать grep -o
, затем выполнить трубку через wc -l
:
$ echo "123 123 123" | grep -o 123 | wc -l
3
Может быть, вы должны сначала преобразовать пробелы в символы новой строки:
$ echo "1 1 2 2 2 5" | tr ' ' $'\n' | grep -c 2
3
Возможно ниже:
echo "123 123 123" | sed "s/123 /123\n/g" | wc -l
(может быть, уродливо, но мой bash fu не так уж и хорош)
Почему бы не использовать awk?
Вы можете использовать awk '{print gsub(your_regex,"&")}'
для печати количества совпадений в каждой строке или
awk '{c+=gsub(your_regex,"&")}END{print c}'
чтобы напечатать общее количество совпадений. Обратите внимание, что относительная скорость может варьироваться в зависимости от того, какая реализация awk используется и какой ввод указан.
Это может сработать для вас:
sed -n -e ':a' -e 's/123//p' -e 'ta' file | sed -n '$='
GNU sed может быть написано:
sed -n ':;s/123//p;t' file | sed -n '$='