我应该找到并显示包含单词“carrot”的文件数量(忽略大小写)
到目前为止,这就是我所拥有的,我只是不确定如何将 wc 添加到其中来计算有多少个包含“胡萝卜”一词的文件
寻找 。 -exec grep -i 胡萝卜 {} \;
答案1
首先,正如其他人所说,没有理由使用find
,只需使用递归grep
:
grep -irm 1 carrot . | wc -l
确保在第一个匹配后停止搜索每个文件-m 1
。grep
没有它,您就无法计算数量文件只包含carrot
数量线,如果同一个文件包含多个carrot
.从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.
如果你真的真的想用 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。以下将给出相同的结果grep[ETC]|厕所-l:
grep -l -r -i "carrot" . | grep -c .
下面将打印包含搜索单词的文件的编号列表。
grep -l -r -i "carrot" . | grep -n .