grep with regexp:whitespace不匹配,除非我添加一个断言

Ank*_*wal 9 regex linux bash grep

在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
Run Code Online (Sandbox Code Playgroud)

但事实并非如此

$ echo "this is a     line" | grep 'a\s\+line'
Run Code Online (Sandbox Code Playgroud)

但这也符合

$ echo "this is a     line" | grep 'a\s\+\bline'
this is a     line
Run Code Online (Sandbox Code Playgroud)

我不明白为什么#2不匹配(而#1确实如此)而#3也显示匹配.这有什么区别?

Dav*_* W. 4

查看您的grep联机帮助页。Perl 添加了许多原始规范中没有的正则表达式扩展。然而,由于它们被证明非常有用,许多程序都采用了它们。

不幸的是,grep有时会陷入过去,因为您想确保您的grep命令与旧版本的grep.

有些系统有egrep一些扩展。其他允许您使用grep -E来获取它们。还有一些grep -P允许您使用 Perl 扩展。我相信Linux系统的grep命令可以使用-P大多数Unix系统中不可用的扩展,除非有人用GNU版本替换了grep。较新版本的 Mac OS X 也支持该-P切换,但较旧版本不支持。