我如何使用grep在文件夹中查找单词?
在Windows中,我会search一个文件夹中的单词。 同样,我想知道一个特定的单词是否出现在包含许多子目录和文件的目录中。 我search的grep语法显示我必须指定文件名,即grep string filename
。
现在,我不知道文件名,所以我该怎么办? 一个朋友build议做grep -nr string
,但我不知道这是什么意思,我没有得到它的结果(没有响应,直到我发出ctrl + c )。
grep -nr 'yourString*' .
最后的点search当前目录。 每个参数的含义:
-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命令。
grep -nr string my_directory
其他注意事项:这符合语法grep [options] string filename
因为在类Unix系统中,目录是一种文件(有一个术语“常规文件”来专指在Windows中被称为“文件”的实体)。
grep -nr string
从标准input中读取要search的内容,这就是为什么它只是在那里等待input,而当你按^ C时也停止这样做(它也停止在^ D上,这是组合键为文件结束)。
GREP :全局正则expression式打印/parsing器/处理器/程序。
您可以使用它来search当前目录。
您可以指定-R作为“recursion”,这意味着程序将search所有子文件夹及其子文件夹及其子文件夹的子文件夹等。
grep -R "your word" .
-n
将打印行号,在文件中匹配的地方。
-i
将search不区分大小写的(大写/非大写字母)。
grep -inR "your regex pattern" .
还有:
find directory_name -type f -print0 | xargs -0 grep -li word
但是对于初学者来说这可能会有点不同。
find
是一个通用的目录walker / lister, -type f
意思是“寻找纯文件而不是目录和命名pipe道,你有什么”, -print0
意思是“使用空字符作为分隔符在标准输出上打印它们”。 find
的输出发送到xargs -0
并抓住它的标准input块(以避免命令行长度限制),使用空字符作为logging分隔符(而不是标准换行符),并将grep -li word
应用于每个集合的文件。 在grep
, -l
表示“列出匹配的文件”, -i
表示“不区分大小写”; 你通常可以结合单个字符选项,所以你会看到-li
比-l -i
更频繁。
如果你不使用-print0
和-0
那么你会遇到包含空格的文件名的问题,所以使用它们是一个好习惯。
grep -nr search_string search_dir
将做一个RECURSIVE(意味着目录和所有它的子目录)searchsearch_string。 (正如usta正确回答)。
你之所以没有得到你朋友的build议:
grep -nr string
是因为没有指定目录。 如果您位于要进行search的目录中,则必须执行以下操作:
grep -nr string .
包括'。'是很重要的。 字符,因为这告诉grep来searchTHIS目录。
-
grep -r "yourstring" *
将在任何文件和文件夹中find“yourstring”
现在,如果您想要同时查找两个不同的string,则可以始终使用选项E并为search添加单词。 例如rest之后
-
grep -rE "yourstring|yourotherstring|$" *
将search你的yourstring
或你的yourotherstring
匹配的列表位置
我喜欢使用的另一个选项:
find folder_name -type f -exec grep your_text {} \;
-type f只返回文件而不是文件夹
-exec和{}对search到的文件运行grep(确切的语法是“-exec command {}”)。
为什么不执行recursionsearch来查找子目录中的所有实例:
grep -r'text'*
这就像一个魅力。
你select的答案是好的,它的工作原理,但它不是正确的做法,因为:
grep -nr yourString* .
这实际上searchstring"yourStrin"
和"g"
0或多次。
所以正确的做法是:
grep -nr \w*yourString\w* .
该命令用当前文件夹前后任何字符searchstring。
不要使用grep。 下载Silver Searcher或者ripgrep 。 他们都是优秀的,比grep更快,或者拥有大量的选项。