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.javaor 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或更多的上述字符的重复运算符*。