关于bash:shell脚本:通过搜索文件夹中的所有文件来查找字符串?

shell script : find a string by searching inside all the files in a folder?

本问题已经有最佳答案,请猛点这里访问。

如何查找文件夹中(可能有多个)文件中包含的字符串(包括隐藏文件和子文件夹)?

我试过这个命令:

1
find . -maxdepth 1 -name"tes1t" -print0 | sed 's,\.\/,,g'

但这没有结果。


如果您的grep支持-r(递归,=-d recurse)。注意,那么递归深度就没有限制了。

或者尝试grep -d skip -Hn PATTERN {,.[!.]}*{,/{,.[!.]}*};这应该有效,因为grep接受多个文件参数。如果你的版本的grep不支持它,就扔掉-d skip的东西。对于不带撑板膨胀的壳体,使用手动膨胀形式* */* */.[!.]* .[!.]* .[!.]*/* .[!.]*/.[!.]*


首先,你的maxdepth应该是2,而不是1,现在你的find命令不会在子目录中下降。此外,您可以在find的输出上对您的模式进行grep。这可以通过以下方式实现:

1
find . -maxdepth 2 -type f -exec grep 'pattern here' '{}' \;

说明:

  • find .在当前目录下执行find
  • -maxdepth 2在子目录中不再下降。
  • -type f查找不是目录的每个文件。
  • -exec grep 'pattern' '{}'以某种模式执行grep语句,{}包含找到的每个文件的文件名。

向grep添加用于颜色突出显示、输出行号和/或文件名的选项。

有关更多信息,请参阅man findman grep