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也显示匹配。这有什么区别?
答案 0 :(得分:4)
查看您的grep
联机帮助页。 Perl添加了许多不在原始规范中的正则表达式扩展。然而,由于它们证明非常有用,许多程序都采用了它们。
不幸的是,grep
有时会被卡住,因为您要确保grep
命令与旧版grep
保持兼容。
某些系统egrep
有一些扩展名。其他人允许您使用grep -E
来获取它们。还有一些grep -P
允许您使用Perl扩展。我相信Linux系统的grep命令可以使用大多数Unix系统中不可用的-P
扩展,除非有人用GNU版本替换了grep。较新版本的Mac OS X也支持-P
开关,但不支持旧版本。
答案 1 :(得分:1)
grep
不支持完整的正则表达式集,因此请尝试使用-P
启用perl正则表达式。你不需要逃避+
即
echo "this is a line" | grep -P 'a\s+line'