1

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

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

4 回答 4

2

使用 Find 的执行标志

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

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

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

find . -name '*.mk' -exec grep -F .dat {} +
于 2013-01-17T07:41:59.527 回答
2

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

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

find . -name '*.mk' | xargs grep '.dat'
于 2013-01-17T07:44:51.157 回答
0

使用 xargs:

find . -name "*.mk"| xargs grep '\.dat'
于 2013-01-17T07:36:55.293 回答
0

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

find . -name "*.mk" -exec grep ".dat" \{\} \;
于 2013-01-17T07:44:27.160 回答