在Windows中,我会在文件夹中搜索一个单词。类似地,我想知道特定的单词是否出现在包含许多子目录和文件的目录中。我对grep语法的搜索显示我必须指定文件名,即grep字符串文件名。

现在,我不知道文件名,我该怎么做? 一个朋友建议做grep -nr字符串,但我不知道这意味着什么,我没有得到任何结果(没有响应,直到我发出Ctrl + C)。


当前回答

下面的示例递归地查找位于文件夹path1、path2和path3中的*.xml和*.js文件中的搜索字符串。

grep -r --include=*.xml --include=*.js "your search string" path1 path2 path3

因此,您可以在文件的子集中搜索许多目录,只需在最后提供路径。

其他回答

在目录中运行(terminal)以下命令。它还将递归地检查子目录内部。

grep -r 'your string goes here' * 
grep -nr string my_directory

附加说明:这满足grep [options] string filename语法,因为在类unix系统中,目录是一种文件(有一个术语“常规文件”专门指在Windows中被称为“文件”的实体)。

grep -nr string从标准输入读取内容进行搜索,这就是为什么它只是等待你的输入,并在你按^C时停止这样做(它也会在^D时停止,这是文件结束的组合键)。

grep -nr search_string search_dir

将对search_string进行递归(意味着目录及其所有子目录)搜索。(由usta正确回答)。

你朋友的建议没有得到任何答案的原因是:

grep -nr string

是因为没有指定目录。如果你在你想要搜索的目录中,你必须执行以下操作:

grep -nr string .

包含'是很重要的。'字符,因为这告诉grep搜索这个目录。

下面的示例递归地查找位于文件夹path1、path2和path3中的*.xml和*.js文件中的搜索字符串。

grep -r --include=*.xml --include=*.js "your search string" path1 path2 path3

因此,您可以在文件的子集中搜索许多目录,只需在最后提供路径。

类似于@eLRuLL发布的答案,一个更简单的方法来指定一个尊重单词边界的搜索是使用-w选项:

grep -wnr "yourString" .