GNU/Linux >> Linux の 問題 >  >> Linux

フォルダー内のすべてのファイル内の文字列のすべての出現をカウントする

あなたは近くにいます。フォルダ内のすべての .txt ファイル内で「ha」が出現する総数を取得するには:

grep -o "ha" *.txt | wc -l

man grep から :

-o, --only-matching
       Print only the matched (non-empty) parts of a matching line, with
       each such part on a separate output line.

それぞれ 一致は別の行に出力されるため、wc -l が許可されます それらすべてを数えます。

ただし、デフォルトでは、grep は行の最初の出現のみを検出し、行全体を出力します。同様に、オプション -c すべての行で最初に出現するものだけを検索し、1 つ (またはそれ以上) の一致があった行の数を出力します。

編集:

個々のファイル内の合計出現回数を (ファイル名とともに) 出力する方法は次のとおりです:

find *.txt -printf 'echo "$(grep -o "ha" %p | wc -l) %p";' | sh

#Example output
3 file1.txt
1 file2.txt

説明:

find *.txt - .txt ファイルを検索

-printf - %p のオカレンスを置き換えて、単一引用符 (フォーマット済み) の間のすべてを標準出力に出力します。 find の出力 (ファイル名) を使用

$(grep -o "ha" %p | wc -l) - 上記のように動作します

| sh - -printf からの出力 (コマンド) はシェルにパイプされて実行されます

printf はファイル名ごとに 1 回呼び出されることに注意してください。


grep を使用する代わりに 、 ag -c ha を使用してみてください シルバーサーチャー:

1.txt:3
2.txt:1

それはより高速です! ubuntu を使用している場合は、パッケージ silversearcher-ag をインストールできます。 .


Linux
  1. ファイル内の単語をGrepしてから、ファイルをコピーしますか?

  2. 最後の(最新の)20を除くフォルダ内のすべてのファイルを削除しますか?

  3. テキスト文字列を含まないすべてのファイルを検索するにはどうすればよいですか?

  1. 特定のフォルダ内の特定の拡張子を持つすべてのファイルを削除するにはどうすればよいですか?

  2. ディレクトリ内のすべてのファイルで単語のすべての出現を変更する方法

  3. ディレクトリとそのすべてのサブディレクトリ内の文字列を grep する方法は?

  1. Linux で特定のテキストを含むすべてのファイルを見つけるにはどうすればよいですか?

  2. X よりも古いすべてのファイルを含むディレクトリを検索しますか?

  3. LInux で多数のファイルから文字列を検索する