2012-05-04 2 views
1

findコマンドを実行して、特定のテキストの合計発生数を調べようとしています。また、別のfindコマンドを使用して、このテキスト。findコマンドでテキストとファイルの総発生数を調べるには

私は今このコマンドを持っています。

find . -name "*.txt" | xargs grep -i "abc" 

これは私がABCはファイルの

  • 合計数を表示された回数の

    1. 合計数を取得するために1つのまたは2つfindのいずれかのコマンドを取得したいテキストABCになどを持っているすべてのファイルをもたらしますそれにはabcがあります。
  • 答えて

    2

    あなたはあなたが望むものを行うために、よりgrep(1)のオプションを使用する必要があります。abcが発生した回数の合計のために

    1. 、あなたはabcは、単一の行にある場合の世話をする必要があります2回以上:abcが含まれているファイルの総数については

      find . -name '*.txt' -print0 | xargs -0 grep -o -i abc | wc -l 
      
    2. は、あなたはケース単一のファイルの世話をする必要がありますgrep(1) manページから

      find . -name '*.txt' -print0 | xargs -0 grep -l -i abc | wc -l 
      

    -l, --files-with-matches 
          Suppress normal output; instead print the name of each 
          input file from which output would normally have been 
          printed. The scanning will stop on the first match. 
          (-l is specified by POSIX.) 
    

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

    私は全く同じライン上のいろはを忘れabc 2回以上含まれています。 スクリプトをさらに短くするには、wc –

    +0

    @ReubenL。にパイプするのではなく、grepの-c(count)フラグを使用して、 'xargs(1)'への入力が単一の'grep(1)'の実行 - はい、少し早く、そして多くの場合非常に短く簡単です:)しかし、ファイルの小さな山はファイルの大きな山に成長する傾向があります... – sarnold

    +0

    @ sarnold、あなたの答えをありがとう。私はあなたに戻ってみることにしよう。 – Nomad

    関連する問題