web-dev-qa-db-ja.com

一致する行数ではなく、grepを使用して一致の総数をカウントする

Grepは、一致の総数をカウントする方法を提供していますか? -cオプションは、正規表現に一致した行数のみを返しますが、この場合、1行に複数の一致があります。

29
William

これを試して:

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

まあ、-Eは単なる例であり、-P、-Fなどになる可能性があります。ポイントは-oです。

テスト:

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

kent$  echo "abc xxx yyy"|grep -oP "[a-z]{3}"|wc -l
3
29
Kent

行の一致したサブセクションのみが印刷されることを示す-oフラグがあります。

これをwc -lと組み合わせて使用​​します。

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

man grep でも説明されています。

8
chown

他の回答の代わりに、grepだけを使用します。

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

最初のgrepの-oは各一致を出力し、一致全体を出力します-行全体ではありません(もちろん、行全体IS一致が一致しない限り)。2番目のgrepの-cそれらを数える。

入力する文字はさらにいくつか(4や5など)ですが、覚えやすいと思います。

1
Self Evident