Answers:
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
or MobileAppServlet.class
或MobileAppServlet.txt
; 'MobileAppASer*.*'
是另一种执行相同操作的方法。)
要检查更多参数,请使用man grep命令。
grep -nr MobileAppSer* .
1。假设我们在当前目录中匹配3个文件MobileAppSer*
通配符模式:命名MobileAppServlet.java
,MobileAppServlet.class
,MobileAppServlet.txt
。然后grep
将被调用是这样的:grep -nr MobileAppServlet.class MobileAppServlet.java MobileAppServlet.txt .
。这意味着在文件MobileAppServlet.java,MobileAppServlet.txt和当前目录的其他位置中搜索文本“ MobileAppServlet.class”-这肯定不是用户想要的。
MobileAppSer*
通配符模式匹配的文件,grep
将按MobileAppSer*
原样接收参数,因此将其作为搜索文本“ MobileAppSe”后跟0个或多个出现的“ r”的原因,因此它将尝试在当前目录的文件内容中查找文本“ MobileAppSe”,“ MobileAppSer”,“ MobileAppSerr”,“ MobileAppSerrr”等,而不是用户想要的。
grep -nr string my_directory
附加说明:这满足语法要求,grep [options] string filename
因为在类Unix系统中,目录是一种文件(存在一个“常规文件”一词,专门用于指代Windows中仅称为“文件”的实体)。
grep -nr string
从标准输入中读取要搜索的内容,这就是为什么它只是在那里等待您的输入,并在按^ C时停止这样做(它也将在^ D处停止,这是结束输入的组合键) -文件)。
grep -inr "my word" .
-r
对于grep而言,意味着递归地在子目录中搜索,并且-n
意味着在输出的每一行前都添加包含该行的文件的相应行号。man grep
描述所有这些,还有更多。
GREP:全局正则表达式打印/解析器/处理器/程序。
您可以使用它来搜索当前目录。
您可以为-recursive指定-R,这意味着程序将在所有子文件夹,它们的子文件夹以及它们的子文件夹的子文件夹中进行搜索。
grep -R "your word" .
-n
将在文件中匹配的位置打印行号。
-i
将搜索不区分大小写的字母(大写/非大写字母)。
grep -inR "your regex pattern" .
grep -nr search_string search_dir
将执行RECURSIVE(意味着目录及其所有子目录)搜索search_string。(由usta正确回答)。
您没有得到朋友建议的麻烦:
grep -nr string
是因为未指定目录。如果您要在其中进行搜索的目录,则必须执行以下操作:
grep -nr string .
包含“。”很重要 字符,因为这告诉grep搜索此目录。
还有:
find directory_name -type f -print0 | xargs -0 grep -li word
但这对于初学者来说可能有点过多。
find
是通用目录walker / lister,-type f
表示“查找普通文件,而不是目录和命名管道以及所拥有的内容”,-print0
表示“使用空字符作为分隔符将它们打印在标准输出上”。使用空字符作为记录分隔符(而不是标准换行符),将来自的输出find
发送到xargs -0
并抓取其标准输入(成块(以避免命令行长度限制)),并将其应用于grep -li word
每个文件集。在上grep
,-l
表示“列出匹配的文件”,-i
表示“不区分大小写”;您通常可以结合使用单个字符选项,因此-li
比看到更多-l -i
。
如果不使用-print0
,-0
则会遇到包含空格的文件名的问题,因此使用它们是一个好习惯。
man find
从命令行检查以查看您find
支持的选项。
您选择的答案很好,并且可行,但这不是正确的答案,因为:
grep -nr yourString* .
实际上,这会搜索字符串"yourStrin"
和"g"
0或多次。
因此,正确的方法是:
grep -nr \w*yourString\w* .
此命令在当前文件夹中搜索带有前后任何字符的字符串。
grep -nr yourString
,它也可以工作,因为它会寻找yourString
行中任何地方的裸机(或者至少在我的系统OSX Lion上如此)
与@eLRuLL发布的答案类似,指定尊重单词边界的搜索的更简单方法是使用以下-w
选项:
grep -wnr "yourString" .
不要使用grep。下载Silver Searcher或ripgrep。它们都非常出色,并且比grep或带有大量选项的ack更快。
*
?这将导致外壳通配符扩展(如果存在与通配符模式匹配的文件名),或者grep将其用作0或更多的上述字符的重复运算符*
。