GNU grep 的 -X 选项的实际目的是什么,为什么它没有记录?

xhi*_*nne 59 grep options

通过阅读这个问题,我发现 GNUgrep有一个-X需要参数的选项。奇怪的是,手册页和信息页中都没有提到它。

查看源代码,输出中间--help有该注释:

/* -X is deliberately undocumented.  */
Run Code Online (Sandbox Code Playgroud)

进一步看,似乎该-X matcher选项设置用于正则表达式引擎matcher一个 grepegrepfgrepawkgawkposixawkperl(截至2.25版本)。

一些这些值是严格相同的现有选项(即grep -Ggrep -Egrep -Fgrep -P)。另一方面,这三个awk变体没有相应的选项。

有人知道这个选项的实际目的是什么,尤其是使用正则awk表达式引擎之一?有人能告诉我为什么故意没有记录吗?

Ste*_*itt 69

它的目的是以grep一种或另一种形式提供对在 GNU中实现的各种匹配器的访问,特别是在其他情况下不可用的 AWK 匹配器,可能用于测试目的(请参阅讨论添加和匹配器的错误 16481)。gawkposixawk

然而,它目前有问题,这就是它被记录为未记录的原因

2005 年 1 月 27 日星期四下午 04:06:04 -0500,Charles Levert 写道:
> '-X' 选项,特别是它与“awk”匹配器的使用
> (“-X awk”) 没有记录。

请让它无证。

除了 -X awk 之外,它不提供任何新功能。

我认为 awk regexps 的实现并不完美。

新的 GNU 正则表达式包含一些设置 AWK 样式语法的方法,是的。然而 gawk 并不直接使用它:它首先解析正则表达式。

特别是,awk 正则表达式允许转义序列 \NNN,其中 NNN 是一个八进制值。所以 /\040/ 数学空间。grep -X awk 似乎不支持这一点。

恐怕 regex.c 不支持这些转义序列。

在我们决定记录(并因此支持)此功能之前,我们必须确保正则表达式与 awk 正则表达式完全兼容。

我认为这不值得麻烦。

斯捷潘

一个后续要求注释添加,并且提供对多一点背景-X选项:

我自己的倾向是建议完全删除 -X。我怀疑它是由原作者添加的,主要是为了测试目的。如果它要留在,至少添加这样的评论。

/* -X is undocumented on purpose. */
Run Code Online (Sandbox Code Playgroud)

以避免将来讨论已解决的问题。

阿诺德

斯捷潘此后不久就这样做了

  • “避免将来讨论已解决的问题。” 那是怎么解决的?;) (7认同)
  • 不错的考古工作,谢谢斯蒂芬。 (4认同)
  • 谢谢 :-)。不幸的是,这条线索在 grep 2.0 处停止了;我的印象是引入了“-X”的版本,可能是 DFA 重写的副作用,但更改日志的细节很短。 (2认同)