【问题标题】:find/grep command that displays filename and java package显示文件名和 java 包的 find/grep 命令
【发布时间】:2014-06-25 07:34:44
【问题描述】:

基本上,我只想在文件夹中存在的 java 文件中找到一个字符串(递归),并希望显示它们的文件路径以及包含该字符串的相应 java 文件的“包”。

find . -name '*.java' -print0 | xargs -0 grep -l 'SRO'

我上面写的命令搜索字符串'SRO'并打印这些文件的文件路径。

请建议相同的 shell 脚本命令。

【问题讨论】:

  • 1.展示你的尝试。 2. 提供一些示例输入/输出。
  • 那是一个shell脚本...
  • 你能澄清want to display their filepath as well as the "package"的要求吗?
  • @CDahn 您在下面给出的答案给了我想要的输出。为此非常感谢。您能否建议我还应该在下面的脚本中添加什么来打印文件名。只需打印 .java

标签: linux shell grep find


【解决方案1】:

这应该可行:

for file in `find -name "*.java"`
do
    if [ "`grep SRO $file`" != "" ]
    then
        echo "Path: `dirname $file`"
        echo "Package: `grep package $file`"
    fi
done

【讨论】:

  • 您在上面给出的答案给了我想要的输出。为此非常感谢。您能否建议我还应该在下面的脚本中添加什么来打印文件名。只需打印 .java。您还可以分享一个链接,我可以从中学习所有这些,以便将来我可以自己制作其中的一些。 :)
  • 这个答案有很多问题。 find 命令的输出不应像这样在 for 循环中使用。如果文件名有空格或换行怎么办? grep 对于这种情况有更好的 -q 选项。
  • 只需添加 echo 'basename $file"。我还使用 Google 搜索“学习 bash 脚本”并获得了一些看起来很合理的资源,包括 tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html
  • @anub 我希望文件名没有换行符......我相信你也可以添加“unset IFS”来正确处理空格。
  • 它们都不足以处理空格/换行符。无论如何,您可以从 SO 上的其他答案中了解有关这些案例的更多信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
  • 1970-01-01
  • 2014-09-19
  • 2014-03-12
  • 2018-08-17
  • 2013-10-16
  • 1970-01-01
相关资源
最近更新 更多