ディレクトリ内の各ファイルで文字列の発生回数を計算する方法は?

ディレクトリ内の各ファイルで文字列の発生回数を計算する方法は?

grep -G '{string}' *. | wc -l{string}ディレクトリ全体の総数を示します。一方、wc -l *.ファイルあたりの行あたりの数は提供されますが、{string}私が興味のあるファイルごとの数は提供されません。私は、{string}各ファイルの発生回数を個別に計算できる2つの組み合わせを探しています。

答え1

これ必要なオプションは次のとおりです-c

-氏

選択した行数のみを標準出力に書き込みます。


検索するネストされたディレクトリがある場合:

使用+:

find /your_dir -type f -exec grep -cF '{string}' {} +

またはGNU Grep(または他の実装)が利用可能な場合-r再帰検索のために)をサポートします。

grep -rcF '{string}' your_dir

ディレクトリ内にサブディレクトリがない場合は簡単です。

grep -cF '{string}' your_dir/*

動作します。


さらに、-GGNU Grep特定の)BREエンジンが有効になっており、これはデフォルトの選択であり、ERE同様のタグ{(エスケープされていない場合)を処理しません。-Fオプションの強制使用を検討してください。必要でない場合は、単純な文字列を検索するか、正規表現のメタ文字補間を無効にします。

答え2

grepオプションは、-c各ファイルに対して選択した行数を印刷します。

grep -c '{string}' *.

(オプション-G(デフォルトの正規表現)はデフォルト値なので重複します.)


サンプルファイルの使用

file1

foo
bar
baz
foo
bar

file2

foo
bar
baz
foo
bar
foo
foo
bar
bar foo
baz
foo
bar

私は次のような結果を得ます。

$ fgrep -c foo file*
file1:2
file2:6

ファイル名パターンが1つのファイルにのみ一致する場合、grepそのファイル名は印刷されません。これを防ぐには、-HGNUがある場合はオプションを使用できますgrep

grep -cH '{string}' *.

/dev/null非標準オプションの代わりに追加すると、-H添付ファイルの数が0として表示されます。)

関連情報