我有一个以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,xargs并grep显示这些字符串:
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脚本文件中.
麻烦制造者是*.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特殊的空格或字符时,才需要引号.