特定の単語を含むファイルの数を見つけて計算する方法は?

特定の単語を含むファイルの数を見つけて計算する方法は?

「carrot」という単語を含むファイルの数を見つけて表示する必要があります(大文字と小文字を無視)。

これが私が今まで持っているものです。 "carrot"という単語を含むファイルがいくつかの個人を計算するためにここにwcを追加する方法がわかりません。

探す。 -exec grep -iにんじん{} \;

答え1

まず、他の人が言ったように使用する理由はありませんfind。単に再帰を使用してくださいgrep

grep -irm 1 carrot . | wc -l 

最初の一致後に各ファイルの検索を停止します-m 1grepなければ数量を計算できません文書carrot数量のみを含むワイヤー、同じファイルに複数のcarrotman grep

    -r, --recursive
          Read all files  under  each  directory,  recursively,  following
          symbolic  links  only  if they are on the command line.  This is
          equivalent to the -d recurse option.
   -i, --ignore-case
          Ignore  case  distinctions  in  both  the  PATTERN and the input
          files.  (-i is specified by POSIX.)
   -m NUM, --max-count=NUM
          Stop reading a file after NUM matching lines. 

本当に find にしたいなら、こうすればいいです。

find . -type f -exec grep -im 1 carrot {} \; | wc -l

ディレクトリが-type f必要ないため、これを指定しました。grep

答え2

その単語を含むファイルの数を見つけるニンジン

number_of_files=`grep -l -r -i "carrot" . | wc -l`

パラメータの意味grep

-l, --files-with-matches
         Only the names of files containing selected lines are written to standard output.  grep will only search a file until a match has been found, making
         searches potentially less expensive.  Pathnames are listed once per file searched.  If the standard input is searched, the string ``(standard
         input)'' is written.

-R, -r, --recursive
         Recursively search subdirectories listed.

-i : case insenstive

wc -l:プログラムに入力として渡された行数を印刷します。私たちの場合、この行は入力パターンと一致するファイルの名前ですgrep

印刷物

echo $number_of_files

答え3

smRajソリューションのバリエーションは、grepを2回呼び出すことです。以下は同じ結果を提供しますgrep[など]|トイレ-l:

grep -l -r -i "carrot" . | grep -c .

次は、クエリを含むファイルの番号付きリストを印刷します。

grep -l -r -i "carrot" . | grep -n .

関連情報