-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)
find directory_name -type f -print0 | xargs -0 grep -li word
但这对初学者来说可能有点多了 .
find 是通用目录walker / lister, -type f 表示"look for plain files rather than directories and named pipes and what have you", -print0 表示"print them on the standard output using null characters as delimiters" . find 的输出发送到 xargs -0 并以块的形式获取其标准输入(以避免命令行长度限制),使用空字符作为记录分隔符(而不是标准换行符),并将 grep -li word 应用于每组文件 . 在 grep 上, -l 表示"list the files that match"和 -i 表示"case insensitive";你通常可以组合单个字符选项,所以你会比 -l -i 更频繁地看到 -li .
11 回答
最后的点搜索当前目录 . 每个参数的含义:
grep -nr 'MobileAppSer*' .
(会找到MobileAppServlet.java
或MobileAppServlet.class
或MobileAppServlet.txt
;'MobileAppASer*.*'
是另一种做同样事情的方法 . )要检查更多参数,请使用 man grep 命令 .
grep -nr string my_directory
附加说明:这满足语法
grep [options] string filename
,因为在类Unix系统中,目录是一种文件(有一个术语"regular file"专门指代在Windows中被称为"files"的实体) .grep -nr string
从标准输入中读取要搜索的内容,这就是为什么它只是等待你的输入,并在你按^ C时停止这样做(它也会停在^ D上,这是结束的关键组合 - 的文件) .GREP :全局正则表达式打印/分析器/处理器/程序 .
您可以使用它来搜索当前目录 .
您可以为"recursive"指定-R,这意味着程序将搜索所有子文件夹及其子文件夹及其子文件夹的子文件夹等 .
-n
将打印文件中匹配的行号 .-i
将搜索不区分大小写(大写/非大写字母) .还有:
但这对初学者来说可能有点多了 .
find
是通用目录walker / lister,-type f
表示"look for plain files rather than directories and named pipes and what have you",-print0
表示"print them on the standard output using null characters as delimiters" .find
的输出发送到xargs -0
并以块的形式获取其标准输入(以避免命令行长度限制),使用空字符作为记录分隔符(而不是标准换行符),并将grep -li word
应用于每组文件 . 在grep
上,-l
表示"list the files that match"和-i
表示"case insensitive";你通常可以组合单个字符选项,所以你会比-l -i
更频繁地看到-li
.如果您不使用
-print0
和-0
,那么您将遇到包含空格的文件名的问题,因此使用它们是一个好习惯 .将执行RECURSIVE(意味着目录及其所有子目录)搜索search_string . (正如usta正确回答的那样) .
你没有得到你朋友的建议的原因:
是因为没有指定目录 . 如果您位于要进行搜索的目录中,则必须执行以下操作:
包含' . '很重要 . 字符,因为这告诉grep搜索这个目录 .
grep -r "yourstring" *
会在任何文件和文件夹中找到"yourstring"现在,如果您想同时查找两个不同的字符串,则可以始终使用选项E并为搜索添加单词 . 休息后的例子
grep -rE "yourstring|yourotherstring|$" *
将搜索yourstring
或yourotherstring
匹配的列表位置为什么不进行递归搜索以查找子目录中的所有实例:
grep -r 'text' *
这就像一个魅力 .
我喜欢使用的另一个选项:
-type f只返回文件而不是文件夹
-exec和{}在搜索中找到的文件上运行grep(确切的语法是“-exec command {}”) .
你选择的答案是好的,它可以工作,但这不是正确的方法,因为:
这实际上会搜索字符串
"yourStrin"
和"g"
0或多次 .所以正确的方法是:
此命令使用当前文件夹之前和之后的任何字符搜索字符串 .
不要使用grep . 下载Silver Searcher或ripgrep . 它们都非常出色,而且比grep或ack更快,有很多选择 .
与@eLRuLL发布的答案类似,指定符合字边界的搜索的更简单方法是使用
-w
选项: