在Windows中,我会在文件夹中搜索一个单词。类似地,我想知道特定的单词是否出现在包含许多子目录和文件的目录中。我对grep语法的搜索显示我必须指定文件名,即grep字符串文件名。
现在,我不知道文件名,我该怎么做? 一个朋友建议做grep -nr字符串,但我不知道这意味着什么,我没有得到任何结果(没有响应,直到我发出Ctrl + C)。
在Windows中,我会在文件夹中搜索一个单词。类似地,我想知道特定的单词是否出现在包含许多子目录和文件的目录中。我对grep语法的搜索显示我必须指定文件名,即grep字符串文件名。
现在,我不知道文件名,我该怎么做? 一个朋友建议做grep -nr字符串,但我不知道这意味着什么,我没有得到任何结果(没有响应,直到我发出Ctrl + C)。
当前回答
为什么不做一个递归搜索来找到子目录中的所有实例:
grep -r 'text' *
这就像一个咒语。
其他回答
grep -nr 'yourString*' .
末尾的点搜索当前目录。每个参数的含义:
-n Show relative line number in the file
'yourString*' String for search, followed by a wildcard character
-r Recursively search subdirectories listed
. Directory for search (current directory)
grep -nr 'MobileAppSer*'。(会找到MobileAppServlet.java或MobileAppServlet.class或MobileAppServlet.txt;“MobileAppASer *。*'是做同样事情的另一种方式。)
需要查询更多参数,使用man grep命令。
还有:
find directory_name -type f -print0 | xargs -0 grep -li word
但这对初学者来说可能有点多。
find is a general purpose directory walker/lister, -type f means "look for plain files rather than directories and named pipes and what have you", -print0 means "print them on the standard output using null characters as delimiters". The output from find is sent to xargs -0 and that grabs its standard input in chunks (to avoid command line length limitations) using null characters as a record separator (rather than the standard newline) and then applies grep -li word to each set of files. On the grep, -l means "list the files that match" and -i means "case insensitive"; you can usually combine single character options so you'll see -li more often than -l -i.
如果您不使用-print0和-0,那么您将遇到包含空格的文件名的问题,因此使用它们是一个好习惯。
为什么不做一个递归搜索来找到子目录中的所有实例:
grep -r 'text' *
这就像一个咒语。
在目录中运行(terminal)以下命令。它还将递归地检查子目录内部。
grep -r 'your string goes here' *
下面的示例递归地查找位于文件夹path1、path2和path3中的*.xml和*.js文件中的搜索字符串。
grep -r --include=*.xml --include=*.js "your search string" path1 path2 path3
因此,您可以在文件的子集中搜索许多目录,只需在最后提供路径。