
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 1
garante que grep
a 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 carrot
apenas 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 f
pois você não deseja grep
diretó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 grep
argumentos:
-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 .