Como encontrar e contar quantos arquivos contêm uma determinada palavra?

Como encontrar e contar quantos arquivos contêm uma determinada palavra?

Devo encontrar e exibir a contagem do número de arquivos que contêm a palavra cenoura (caso ignorado)

Até agora é isso que eu tenho, só não tenho certeza de como adicionar o wc nele para contar quantos arquivos existem que contêm a palavra cenoura

encontrar . -exec grep -i cenoura {}\;

Responder1

Primeiro de tudo, como já foi dito, não há razão para usar find, apenas use recursivo grep:

grep -irm 1 carrot . | wc -l 

Isso -m 1garante que grepa pesquisa de cada arquivo será interrompida após a primeira correspondência. Sem ele, você não está contando o número dearquivosque contêm carrotapenas o número delinhas, o mesmo arquivo será contado várias vezes se contiver várias instâncias de carrot. De man 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. 

Se você realmente quiser fazer isso com find, você pode fazer

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

Observe que estou especificando, -type fpois você não deseja grepdiretórios.

Responder2

Encontre o número de arquivos que contêm a palavracenoura

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

Significado para os grepargumentos:

-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: imprime o número de linhas passadas como entrada para o programa. No nosso caso, essas linhas são os nomes dos arquivos com padrão de entrada correspondente encontrado por grep.

Imprima a saída

echo $number_of_files

Responder3

Uma variante da solução do smRaj seria uma invocação dupla do grep. O seguinte daria o mesmo resultado quegrep[etc.]| wc-l:

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

O seguinte imprimiria uma lista numerada dos arquivos que contêm a palavra pesquisada.

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

informação relacionada