为什么grep没有递归

rns*_*nso 1 linux bash grep

我有一个以0-golang子文件夹命名的目录,其中一些.go文件有"更近"的文本.但是,grep与命令-r-R-d recurse目前还没有找到这些:

0-golang$ grep -r "closer" *.go 
0-golang$ grep -R "closer" *.go 
0-golang$ grep -d recurse "closer" *.go 
Run Code Online (Sandbox Code Playgroud)

以上命令不产生输出.但是按照命令使用find,xargsgrep显示这些字符串:

0-golang$ find | grep go$ | xargs -I {} grep closer {}
        "github.com/xlab/closer"
                closer.Fatalln(err)
                closer.Fatalln(err)
                closer.Fatalln("opengl: init failed:", err)
        closer.Bind(func() {
Run Code Online (Sandbox Code Playgroud)

为什么bash grep命令不能递归查找?我必须将此函数合并到bash脚本文件中.

axi*_*iac 7

麻烦制造者是*.go命令行末尾的glob.shell扩展*.go.go当前目录中的文件列表,并将更新的命令行传递给grep.grep在这种情况下递归搜索的请求没有任何意义,它忽略了它.

要解决此问题,您必须告诉在当前目录()中grep搜索递归-r(.)并仅检查与*.go模式匹配的文件(--include).

完整的命令行是:

grep -r --include="*.go" "closer" .
Run Code Online (Sandbox Code Playgroud)

*.go模式周围的引号是防止shell扩展模式所必需的.否则你最终会遇到类似的情况.closer仅当要搜索的文本(closed在本例中)包含对shell特殊的空格或字符时,才需要引号.