Solaris 上的“grep”用法

Sté*_*ent 0 grep solaris

我做了一个带有运行“grep”系统命令的函数的 R 包。这个包已经在CRAN上发布了,在Solaris平台上测试报错。这可能是由于 Solaris 上“grep”的不同用法。以下是包运行的命令示例:

grep --include=\*\.txt --colour=always -n -r -e 'PATTERN'
Run Code Online (Sandbox Code Playgroud)

此命令在当前文件夹及其子文件夹等中找到的所有“txt”文件中递归搜索模式“PATTERN”(递归搜索)。

我没有此命令生成的错误消息,我只知道发生了错误。Solaris 上与此等效的命令是什么?

Hax*_*iel 7

我认为这个问题的核心与POSIX兼容性有关。grep是 POSIX 标准指定的工具。正如 schily 在评论中指出的那样, 的 POSIX 规范grep不包括--include--colour选项。事实上,这些选项是 GNU 的一部分grep,它grep在 POSIX 规范要求的基础上增加了更多的功能。GNUgrep手册可以在这里找到:https : //www.gnu.org/software/grep/manual/grep.html

在 Solaris 上,默认grep工具是 Sun/Oracle 提供的另一个与 POSIX 兼容的实现。自然,该实现不支持此处所需的任一选项。用于Solaris 10手册页可以找到这里,和一个用于Solaris 11可以发现在这里

此限制超出了grepSolaris 上的命令。例如,date与 GNU 相比,Solaris 上的命令要灵活得多datepsSolaris 10 上的命令还将进程命令行截断为 80 个字符。作为这些问题的解决方案/变通方法,GNU 工具最终在 Solaris 10 和 11 上可用。此 QA详细介绍了可以在何处找到它们以及如何安装它们。

如果在 Solaris 系统上安装了 GNU 工具,并且该工具的名称已在使用中,g则命令名称前会带有前缀a 。所以,date变成gdategrep变成ggrep等等。在您的情况下,该问题可以通过使用该ggrep命令来解决,因为它支持所需的 GNU 特定选项(或扩展)。

这里可能存在的问题是 Solaris 系统不需要安装 GNU 工具。安装这些软件包需要一些额外的工作。如果目标上不存在 GNU 工具,则该ggrep命令将根本不可用。

通常,旨在实现跨 POSIX 发行版的可移植性的解决方案采用相反的方法。不是使用特定于每个平台的工具,而是有意修改解决方案以遵守 POSIX 规范,并且不使用特定于任何特定实现的任何扩展。这通常是确保解决方案在所有 POSIX 兼容系统上一致工作的唯一方法。

  • 最后一段是赢家。 (3认同)