如何在所有* .mk文件中找到“.dat”?

时间:2013-01-17 07:33:45

标签: awk grep find

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

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

4 个答案:

答案 0 :(得分:2)

使用Find的Exec Flag

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

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

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

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

答案 1 :(得分:2)

不,它不对,有几个问题:1)你好像用grep模式提供grep,2)模式没有被引用,并且在grep看到它之前将被shell扩展,3)你是通过文件名而不是文件内容进行grep。

要解决1),请使用基本正则表达式,此处的等效项为.*\.dat.dat。 2)是使用单引号或双引号的问题。 3)find返回文件名,因此如果您希望grep对每个文件进行操作,请使用-exec的{​​{1}}标记或使用find。所有这些结合在一起:

xargs

答案 2 :(得分:0)

使用xargs:

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

答案 3 :(得分:0)

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

find . -name "*.mk" -exec grep ".dat" \{\} \;
相关问题