Zliczanie całkowitej liczby dopasowań grep zamiast liczby pasujących wierszy

29

Czy grep oferuje sposób na policzenie całkowitej liczby dopasowań, które wykonuje? Opcja -c zwraca tylko liczbę wierszy pasujących do wyrażenia regularnego, ale w tym przypadku mam wiele dopasowań na linię.

William
źródło

Odpowiedzi:

29

Spróbuj tego:

grep -o -E "your expression" file |wc -l

Cóż, -E to tylko przykład, może to być -P, -F itd. Punkt to -o

test:

kent$  echo "abc xxx yyy"|grep -cP "[a-z]{3}"      
1

kent$  echo "abc xxx yyy"|grep -oP "[a-z]{3}"|wc -l
3
Kent
źródło
8

Istnieje flaga -o, która wskazuje, że powinien zostać wydrukowany tylko dopasowany podsekcja linii.

Użyj tego w połączeniu z wc -l:

grep -o "part of line" | wc -l

man grep również to wyjaśnia.

chown
źródło
1

Alternatywą dla innych odpowiedzi jest użycie grep:

grep -o "seach pattern" somefile.txt | grep -c ""

-O w pierwszym grepie wypisuje każde dopasowanie i tylko dopasowanie - nie całą linię (chyba, że ​​cała linia JEST dopasowaniem, oczywiście). -C w drugim grep następnie je zlicza.

Jest jeszcze kilka znaków do wpisania (np. 4 lub 5), ale łatwiej mi zapamiętać.

Samoświadomość
źródło