在当前目录中递归搜索字符串


15

我想从我所在的目录中递归搜索所有文件,以查找特定的字符串。

我试过了

grep -r -i my_string

我在带有两个小文件的测试文件夹中尝试了此操作,但找不到该字符串。

另外,是否有任何特殊的方式定义“包含”而不是匹配整个单词?


3
尝试grep -r -o -i "your_string" *(使用“引号)。
pl1nk

我收到一些拒绝邮件的权限,它只是忽略那些文件,而是继续检查其余文件吗?
2012年

是的,这些文件被忽略了。
pl1nk 2012年

Answers:


27

您要搜索文件名还是文件中的单词?grep在文件中搜索,这似乎是您想要的。

grep使用正则表达式-实际上,这就是“ re”部分的意思。因此,它不使用普通的bash通配符;也就是说,abc*找不到以abc开头的单词,而是以ab开头的单词,然后是零个或多个c。但是,是的,如果您只是给它提供一个模式,它将在任何地方都可以找到它,而无需了解整个单词。如果要查找整个单词,则需要创建一个正则表达式来告诉它。

但是,像大多数命令一样,您需要将文件名放在命令末尾,因此您的示例将只坐在那里等待文件名。

如@plink所说,使用

grep -r -o -i "your_string" *

(或*.*,或其他filespec)。错误可以忽略。如果遇到很多错误,可以附加2>/dev/null到末尾,这会将stderr重定向到空设备。


6
对于那些好奇的人:-r表示递归(即查找当前文件夹和当前文件夹中的所有文件夹以及这些文件夹中的所有文件夹.....直到无限远),-o表示不显示整行, -i是忽略大小写的情况。
BKSpurgeon '16

@johnsnails不需要反引号。作为内联代码块发布时,在Stack Exchange上更有可能是格式错误。
tom_mai78101 '19

是的,这很有道理。
johnsnails
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.