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


0

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

grep -rc 'PATTERN' .

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

./hotel_232424.dat:234

等々...

どうすれば./hotel_232424.dat:部品を取り外して、数字を印刷するだけですか?


どのファイルがその番号に対応するかを知らずに、各ファイルの行ごとに1つの番号が必要ですか?または、すべてのファイルのオカレンスの数を1つだけですか?
ステファンシャゼル

各ファイルの行ごとに1つの番号
トム

回答:


2

の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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.