如何在 Solaris 上执行递归 grep?
当我尝试时,收到此错误:
-r: invalid option.
答案1
Solaris 上的递归 grep:
find . -name "*.[chix]" | xargs grep -i -n pattern_to_search
答案2
find . | xargs grep whatsyrexpression
或使用cpan
安装ack
命令。
答案3
grep 的 -r 选项仅适用于 gnu grep。使用 xargs 的解决方案很好,但会导致一些问题 - find | xargs grep 会在带有空格的文件名上中断,此外 - xargs 也是 gnu 工具,因此可能未安装。
据我所知,在 solaris 上执行此操作的正确方法是:
find . -type f -exec grep ... {} +
- 最后的意思是每个 grep 调用都会传递很多文件,所以速度会相对较快。
另请注意,solaris(嗯,unix)grep 没有(例如)-E 选项,您应该使用egrep
它。
答案4
find . -type f -exec grep hello {} /dev/null \;
这也适用于带空格的文件名。为什么是 /dev/null?因为每个 grep 实例每次只检查一个文件,因此如果找到匹配项,则不会打印文件名。如果您真的只 grep 一个文件,那么这没问题,但如果从 find 中重复调用 grep,那就没有用了。额外的 /dev/null 用作要搜索的额外虚拟文件,以便 grep 在打印匹配行时将当前文件名添加到前面。