パターンの出現回数を再帰的にカウントするときにファイル名を削除する

パターンの出現回数を再帰的にカウントするときにファイル名を削除する

grep コマンドを実行すると:

grep -rc 'PATTERN' .

パターンが出現する行数を出力しますが、次のようになります。

./hotel_232424.dat:234

等々...

./hotel_232424.dat:部品を削除して番号だけを印刷するにはどうすればよいでしょうか?

答え1

の GNU 実装では、そのための/オプションgrepがあります。-h--no-filename

$ grep -rc PATTERN .
./b:1
./a:0
./1/2/c:2
$ grep -rhc PATTERN .
1
0
2

ポータブル/標準の同等品は次のようになります。

$ find . -type f -exec grep -c PATTERN {} \;
0
2
1

ただし、grepファイルごとに 1 回の呼び出しを実行することになります。

代わりに、発生回数の合計 (ここでは 1+2 = 3) が必要な場合は、次のようにします (移植可能):

$ find . -type f -exec cat {} + | grep -c PATTERN
3

(一部のファイル(つまり、テキスト以外のファイル)の最後の行の後にデータがある場合、結果が台無しになる可能性があることに注意してください)

または、あなたのようなgrepサポートがあれば-r:

$ grep -r PATTERN . | wc -l
3

関連情報