为什么没有目录通过管道发送到 grep 获取搜索结果?

为什么没有目录通过管道发送到 grep 获取搜索结果?

我当前的目录:

pwd
/home/debian

-dig在 中搜索字符串/home/debian/mydoc/source

grep -lr -e "-dig" /home/debian/mydoc/source  
#get nothing as output

在我看来,通过管道发送任何内容到下一个 grep 也不会得到任何结果。

grep -lr -e "-dig" /home/debian/mydoc/source | xargs -d '\n' grep -lr -e "dns"
#my desired output:nothing ,none directory send to xargs

核实 :

grep -lr -e "-dig" /home/debian/mydoc/source | xargs -d '\n' grep -lr -e "dns"
/home/debian/.cache/google-chrome/Default/Cache/b2b96208dbb4fdff_0
/home/debian/.cache/google-chrome/Default/Cache/33f7b9aaf4e3cb37_0
/home/debian/.cache/google-chrome/Default/Cache/b7b3cae8052a94ea_0

真正的搜索结果并不像我想象的那样,是一样的grep -lr -e "dns" /home/debian

grep -lr -e "dns" /home/debian
/home/debian/.cache/google-chrome/Default/Cache/b2b96208dbb4fdff_0
/home/debian/.cache/google-chrome/Default/Cache/33f7b9aaf4e3cb37_0
/home/debian/.cache/google-chrome/Default/Cache/b7b3cae8052a94ea_0

请告诉我bash命令背后的原理grep -lr -e "-dig" /home/debian/mydoc/source | xargs -d '\n' grep -lr -e "dns"--?

答案1

第一个代表肯定不会返回任何内容,因此第二个 grep 从 xargs 获取一个空的 args 列表。

第二个 grep 包括 -r(递归)。

从 man grep 页面:

-r, --recursive :: 请注意,如果未给出文件操作数,则 grep 搜索工作目录。

因此 xargs 运行的 grep 恢复到 /home/debian。

相关内容