Ubuntu 10.04 上的 bash 4.1.5(1) 上的 GNU grep 2.5.4
这个匹配
$ echo "this is a line" | grep 'a[[:space:]]\+line'
this is a line
但这不是
$ echo "this is a line" | grep 'a\s\+line'
但这也匹配
$ echo "this is a line" | grep 'a\s\+\bline'
this is a line
我不明白为什么 #2 不匹配(而 #1 匹配)而 #3 也显示匹配。这里有什么区别?
最佳答案
查看您的 grep
联机帮助页。 Perl 添加了许多原始规范中没有的正则表达式扩展。然而,由于它们被证明非常有用,许多程序都采用了它们。
不幸的是,grep
有时会停留在过去,因为您想确保您的 grep
命令与旧版本的 grep
保持兼容。
有些系统有带有一些扩展的egrep
。其他的允许您使用 grep -E
来获取它们。还有一些有 grep -P
允许您使用 Perl 扩展。我相信 Linux 系统的 grep 命令可以使用 -P
扩展,这在大多数 Unix 系统中是不可用的,除非有人用 GNU 版本替换了 grep。较新版本的 Mac OS X 也支持 -P
开关,但不支持旧版本。
关于regex - grep 正则表达式 : whitespace doesn't match unless I add an assertion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7013152/