【问题标题】:How can I find ".dat" within all *.mk files?如何在所有 *.mk 文件中找到“.dat”?
【发布时间】:2012-12-31 16:51:25
【问题描述】:

我正在尝试使用以下命令在我的所有*.mk 文件中查找.dat 字符串。我想知道这是否正确,因为它没有给我任何输出。

find . -name "*.mk" | grep *.dat

【问题讨论】:

标签: awk grep find


【解决方案1】:

不,这是不对的,有几个问题:1)您似乎为 grep 提供了一个 glob 模式,2)该模式没有被引用,并且会在 grep 看到它之前被 shell 扩展,3)您正在通过文件名而不是文件内容进行 grep'ing。

要解决 1),请使用基本正则表达式,这里的等价物是 .*\.dat 或只是 .dat。 2) 是使用单引号或双引号的问题。 3) find 返回文件名,因此如果您希望 grep 对这些文件中的每一个进行操作,请使用find 的-exec 标志或使用xargs。所有这些加在一起:

find . -name '*.mk' | xargs grep '.dat'

【讨论】:

    【解决方案2】:

    使用 Find 的执行标志

    您实际上并不需要管道,并且可以绕过对 xargs 的需要。使用以下调用对标准 find 命令找到的每个文件执行固定字符串搜索(通常比正则表达式匹配更快):

    find . -name '*.mk' -exec grep -F .dat {} \;
    

    如果您使用 GNU find,则可以改用此语法来避免多次调用 grep 的进程开销:

    find . -name '*.mk' -exec grep -F .dat {} +
    

    【讨论】:

      【解决方案3】:

      使用 xargs:

      find . -name "*.mk"| xargs grep '\.dat'
      

      【讨论】:

        【解决方案4】:

        以这种方式在 find 命令中使用 exec 选项:

        find . -name "*.mk" -exec grep ".dat" \{\} \;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-07-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多