grep -r 在 Solaris 上不起作用

grep -r 在 Solaris 上不起作用

如何在 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 在打印匹配行时将当前文件名添加到前面。

相关内容