GNU grep的-X选项的实际用途是什么,为什么没有说明呢?


58

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

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

/* -X is deliberately undocumented.  */

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

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

有人知道此选项的实际目的是什么,尤其是对于其中一个正则awk表达式引擎而言?有人可以告诉我为什么没有故意记录吗?


6
有趣的发现!我怀疑不对其进行记录的目的是为了使他们可以随意将其从将来的版本中删除,而无需另行通知。GNU未记录选项的另一个示例是-EGNU sed,它提供了与BSD sed的兼容性。(-E如果POSIX正式采用它,我希望将其记录下来,否则将其删除。)
John1024年

3
我同意@ John1024,尽管唯一可以确切回答的人是Stepan Kasal,他于2005年2月7日记录了该记录,-X而故意没有记录。(如果您想问他,他的电子邮件地址在更改日志中。)
通配符

3
我试图通过git历史来跟踪它,但事实证明它是在grep的第一次git commit之前添加的(它出现在1998年11月3日21:38:52的06b9f7e683e7650804cadd9a4c5cf6bff6c89625中)。大概他们将以前的VCS导入了git,显然早于git。
derobert

1
此外,在2.0的grep是最旧的在被发现ftp.gnu.org/gnu/grep/?C=M;O=A
derobert

3
...但是在我在oldlinux.org/Linux.old/distributions/TAMU/TAMU-1.0D/src/tar / ...中找到的1.6中却没有(请注意:我没有努力验证该代码的真实性)到目前为止,它似乎在1.6(1992)和2.0(1993)之间
derobert

Answers:


67

其目的是提供对以grep一种或另一种形式在GNU 中实现的各种匹配器的访问,特别是AWK匹配器,否则可能无法用于测试目的(请参见错误16481,其中讨论了添加gawkposixawk匹配器),否则无法使用。

但是,当前它是越野车,这就是为什么将其记录为未记录的原因

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

请保留无证。

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

我认为,awk正则表达式的实现并不完美。

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

特别是,awk正则表达式允许转义序列\ NNN,其中NNN是八进制值。因此,/ \ 040 /计算空间。grep -X awk似乎不支持此功能。

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

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

我认为这不值得麻烦。

斯蒂芬

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

我个人的建议是完全删除-X。我怀疑它是由原始作者添加的,主要用于测试目的。如果要保留,至少添加这样的评论。

/* -X is undocumented on purpose. */

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

阿诺德

斯捷潘此后不久做了


3
好的考古工作,谢谢斯蒂芬。
xhienne

2
谢谢 :-)。不幸的是,该踪迹在grep 2.0处停止了。我得到的印象是引入的版本-X,可能是DFA重写的副作用,但更改日志缺少详细信息。
斯蒂芬·基特

7
“以避免将来讨论已解决的问题。” 怎么样了?;)
Brock Adams

1
难道“ -X没有记载,因为它有越野车”是更好的选择吗?
JAB
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.