regex - grep 正则表达式 : whitespace doesn't match unless I add an assertion

标签 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

但这不是

$ 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/

相关文章:

Python 在标记正则表达式处拆分

linux - 当计算机切换到 sleep 模式时,TCP 连接会发生什么变化?

linux - 如何使用 bash 查找日期范围内的特定日期?

linux - Zend框架主页

c - SIGIO 到达文件描述符,我没有设置它,当没有 IO 是可能的

php - 如何获取作为管道中第一个命令运行的 PHP 脚本的 PID?

bash - 读取时保留前导空格>>在bash中逐行写入文件

Java RegEx 与 Pattern 类多组

java - 使用 RowFilter (regexFilter) 匹配括号

java - 如果从属性文件加载模式,正则表达式模式不匹配