Почему grep
НЕ дает правильных результатов, потому что он ищет строку в каждой строке, и если строка имеет более 1 вхождения строки, то она также считается как 1 вхождение.
Пример grep
не считая нескольких вхождений строки в одной строке:
Допустим, у нас есть следующий Input_file:
cat Input_file
test my_string
la bla bla
my_string
bla bla
Теперь, когда мы запускаем команду grep
, она дает следующее:
grep "my_string" Input_file | wc -l
2
Теперь давайте поместим несколько вхождений строки в одну строку:
cat Input_file
test my_string
la bla bla
my_string my_string
bla bla
grep "my_string" Input_file | wc -l
2
Поэтому, если разрешено, вы можете попробовать awk
там, где вам не нужно использовать 2 программы (grep
+ wc
), также для команды git
, взятой из ответа @ UnbearableLightness здесь.
git show my_branch |awk '{sum+=gsub(/my string/,"&")} END{print sum}'