Awk 我怎样才能找到;。dat";在所有*.mk文件中?

Awk 我怎样才能找到;。dat";在所有*.mk文件中?,awk,grep,find,Awk,Grep,Find,我正在尝试使用下面的命令在所有*.mk文件中grep查找.dat字符串。我想知道这是否正确,因为它没有给我任何输出 find . -name "*.mk" | grep *.dat 使用xargs: find . -name "*.mk"| xargs grep '\.dat' 使用xargs: find . -name "*.mk"| xargs grep '\.dat' 使用Find的Exec标志 这里不需要管道,可以绕过xargs。使用以下调用对标准find命令找到的每个文件执行固定

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

find . -name "*.mk" | grep *.dat
使用xargs:

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

find . -name "*.mk"| xargs grep '\.dat'
使用Find的Exec标志 这里不需要管道,可以绕过xargs。使用以下调用对标准find命令找到的每个文件执行固定字符串搜索(通常比正则表达式匹配快):

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

find . -name '*.mk' -exec grep -F .dat {} +
使用Find的Exec标志 这里不需要管道,可以绕过xargs。使用以下调用对标准find命令找到的每个文件执行固定字符串搜索(通常比正则表达式匹配快):

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

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

以以下方式使用find命令中的exec选项:

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

以以下方式使用find命令中的exec选项:

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

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

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

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

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

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

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