【问题标题】:How to grep a String in all the java files in subdirectories?如何在子目录中的所有java文件中grep一个字符串?
【发布时间】:2011-07-04 15:51:09
【问题描述】:

我想用grep在当前目录下的所有java文件中查找包含String的行。

我试过了:

grep -r "String" **/*.java

但它不起作用:

grep : **/*.java:  no such file or directory

怎么写?


更新

我在windows上,使用unxUtils提供的grep,不支持--include参数。有没有其他办法?

【问题讨论】:

  • 对于 Windows,我推荐一个名为 AstroGrep on SourceForge 的程序 ...它基于 GUI,默认复选框是“搜索子文件夹” .我非常喜欢它,我只希望我的 Linux 机器上也有类似的东西……~sigh~

标签: regex string grep


【解决方案1】:

使用递归 grep:

grep -r "String" --include=*.java .

【讨论】:

  • 谢谢。我发现它适用于linux,但现在我在windows上。有没有其他办法?
  • 如果你安装了 cygwin,同样的命令也可以在 Windows 上运行,我实际上已经在我的 cygwin 上尝试过,它在 Windows 7 上也能正常运行。
  • ..或 gitbash,因为它有大量有用的可执行文件并且完全支持 Windows 路径。
【解决方案2】:

我猜unxUtils 提供了find 实用程序。所以你可以尝试这样做:

find . -name "*.java" -exec grep "String" {} \;

find . -name "*.java" -exec grep "String" {} \+

第一个版本将为找到的每个文件执行一个grep 命令。后一个版本只会根据需要执行尽可能多的grep 命令,但并非每个find 版本都支持+ 参数。

【讨论】:

  • 坏消息是find . -name "*.java" 不适用于unxUtilsfild,它报告File not found - *.java。最后,我刚刚安装了cygwin
  • 在搜索过程中添加文件名可能会有所帮助,以便于搜索。 print 参数在这里会有所帮助:find。 -name "*.java" -print -exec grep "String" {} \;
猜你喜欢
  • 2013-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-10
  • 1970-01-01
  • 2014-10-29
  • 1970-01-01
相关资源
最近更新 更多