grep -o 正则表达式出现问题

grep -o 正则表达式出现问题

我正在尝试使用带有 --only-matching 标志的 grep 命令,但它的行为并不像我预期的那样。

这个命令:

echo "1/2/3/4/5" | grep -oE "^([^/]+/){0,2}"

给出这个输出:

1/2/
3/4/

我本来只是期待着1/2/

这是怎么回事..?3/4/不应该匹配,"^([^/]+/){0,2}"因为它不在行的开头..

运行 GNU grep2.5.1

答案1

那是个漏洞GNU Grep在早于的版本中这次提交(即早于GNU版本2.5.3)。

引用变更日志的相关部分:

Previously failing tests relative to left anchors (^ and \<) and -w should now pass.

初始提交描述该错误的同时还添加了一个测试:

# End of a previous match should not match a "start of ..." expression.
grep_test "word_word/" "word_/" "^word_*" -o

相关内容