Bash:管道找到Grep

use*_*970 9 bash grep find

以下命令通过递归搜索当前目录和所有子目录来查找所有出现的"some string"

grep -r -n  'some string' .
Run Code Online (Sandbox Code Playgroud)

此命令以递归方式搜索当前目录和所有子目录,并返回*.axvw形式的所有文件

find . -name '*.axvw' 
Run Code Online (Sandbox Code Playgroud)

我想把这两个命令放在一起,所以通过递归搜索当前目录,但只查看以'axvw'结尾的文件,我得到了所有'some string'.

当我尝试运行以下命令时,没有返回任何内容:

find . -name '*js' | grep -n  'some string'
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

anu*_*ava 11

您可以使用以下-exec选项find:

find . -name '*.axvw' -exec grep -n 'some string' {} +
Run Code Online (Sandbox Code Playgroud)

或者使用xargs:

find . -name '*.axvw' -print0 | xargs -0 grep -n 'some string'
Run Code Online (Sandbox Code Playgroud)

  • `-exec grep -n'一些字符串'{} +`会使`find -exec`方法在性能上与xargs竞争,并且保证可以通过2006 POSIX规范获得. (2认同)