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

Dav*_*vid 18 directory grep

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

我试过

grep -r -i my_string
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*ied 30

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

grep 使用正则表达式——事实上,这就是“re”部分所代表的意思。所以,它不使用普通的 bash 通配符;也就是说,abc*不会找到以 abc 开头的单词,它会找到以 ab 开头的单词,然后是零个或多个 c 的后面。但是是的,如果你简单地给它一个模式,它会在任何地方找到它,而无需知道整个单词。如果你想找到整个单词,你需要创建一个正则表达式来告诉它。

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

正如@plink 所说,使用

grep -r -o -i "your_string" *
Run Code Online (Sandbox Code Playgroud)

(或*.*,或其他文件规范)。错误可以忽略。如果您收到很多错误,您可以追加2>/dev/null到末尾,这会将 stderr 重定向到一个空设备。

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