为什么此BSD grep结果与GNU grep不同?


13

我的计算机正在运行macOS 10.12.3,并且我使用的系统安装grep实用程序的版本为2.5.1-FreeBSD。

这些是我在测试各种正则表达式时得到的输出:

屏幕截图

但是,如果我使用GNU grep(2.25版)运行这些程序,则会得到以下信息:

屏幕截图

GNU的grep在我看来是正确的,而BSD的grep是不正确的,不是吗?他们为什么不同?我不明白为什么当正则表达式指定它必须跟随行的开头时,BSD的grep为何匹配“ a”。


2
随时将第一个行为报告为错误。
佐藤桂

1
您会看到echo 'bababa' | grep -E '^(a|b)'全部为红色。而且您也会遇到同样的问题-o。我猜想会grep查找多个匹配项,但是对于第二个匹配项及以上匹配项,它将regexp应用于上次匹配项(anana在您的情况下是第二次匹配)右边的内容,而不会传递REG_NOTBOL标志。又见echo banana | grep -Eo '^ban|^ana$'
斯特凡Chazelas

2
在我的OS X上,@ JdeBP 仅通过提及“为与GNU版本兼容而提供的长选项”来grep标识自己,就像grep (BSD grep) 2.5.1-FreeBSD引用GNU的手册页一样。同样,没有版权声明或GPL(或FSF)的提及。如果它具有GNU util的历史记录,这很难说。
ilkkachu

我们正在演示这是如何引起误解的。(-:grep在Decade Moon的答案中讨论的那个问题,使得很多人认为是正确的grep (GNU grep) 2.5.1-FreeBSD,可以标识为(如在错误讨论中所见),具有FSF版权声明,并且绝对grep是GNU。FreeBSD称为bsdgrepOpenBSD。电话grep是BSD grep,不带--color选项outwith FreeBSD的变体是什么标识为。grep (BSD grep) 2.5.1-FreeBSD,具有讽刺意味的是什么样一个人在错误的讨论表明,FreeBSD的开关grep来。
JdeBP

Answers:


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.