我的计算机正在运行macOS 10.12.3,并且我使用的系统安装grep
实用程序的版本为2.5.1-FreeBSD。
这些是我在测试各种正则表达式时得到的输出:
但是,如果我使用GNU grep(2.25版)运行这些程序,则会得到以下信息:
GNU的grep在我看来是正确的,而BSD的grep是不正确的,不是吗?他们为什么不同?我不明白为什么当正则表达式指定它必须跟随行的开头时,BSD的grep为何匹配“ a”。
2
随时将第一个行为报告为错误。
—
佐藤桂
您会看到
—
斯特凡Chazelas
echo 'bababa' | grep -E '^(a|b)'
全部为红色。而且您也会遇到同样的问题-o
。我猜想会grep
查找多个匹配项,但是对于第二个匹配项及以上匹配项,它将regexp应用于上次匹配项(anana
在您的情况下是第二次匹配)右边的内容,而不会传递REG_NOTBOL标志。又见echo banana | grep -Eo '^ban|^ana$'
在我的OS X上,@ JdeBP 仅通过提及“为与GNU版本兼容而提供的长选项”来
—
ilkkachu
grep
标识自己,就像grep (BSD grep) 2.5.1-FreeBSD
引用GNU的手册页一样。同样,没有版权声明或GPL(或FSF)的提及。如果它具有GNU util的历史记录,这很难说。
我们正在演示这是如何引起误解的。(-:
—
JdeBP
grep
在Decade Moon的答案中讨论的那个问题,使得很多人认为是正确的grep (GNU grep) 2.5.1-FreeBSD
,可以标识为(如在错误讨论中所见),具有FSF版权声明,并且绝对grep
是GNU。FreeBSD称为bsdgrep
OpenBSD。电话grep
是BSD grep
,不带--color
选项outwith FreeBSD的变体是什么标识为。grep (BSD grep) 2.5.1-FreeBSD
,具有讽刺意味的是什么样一个人在错误的讨论表明,FreeBSD的开关grep
来。