为什么\ s +与grep的宏中的空间不匹配? [英] why \s+ do not match the space in macro with grep?

查看:67
本文介绍了为什么\ s +与grep的宏中的空间不匹配?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要搜索 ZEND_BEGIN_ARG_INFO_EX 的宏的定义,

所以我运行命令

 grep   "define\s+ZEND_BEGIN_ARG_INFO_EX" -r  ./ 

但它什么也没找到.

所以,我尝试

grep   "define\s*ZEND_BEGIN_ARG_INFO_EX" -r  ./

成功返回 ZEND_BEGIN_ARG_INFO_EX 的定义,返回

./Zend/zend_API.h:#define ZEND_BEGIN_ARG_INFO_EX  ....

我的问题:

为什么 \ s + 与宏中的空格不匹配?

我认为它应该至少匹配一个空格.

I think it should match at least one space .

推荐答案

这里有两个问题:

  • \ s 是PCRE语法. grep 支持BRE(默认情况下)或ERE(当称为 egrep 或通过 -E 参数时),但不支持非标准扩展名的PCRE.改用 [[[:space:]] .

  • \s is PCRE syntax. grep supports BRE (by default) or ERE (when called as egrep or passed the -E argument), but not PCRE absent nonstandard extensions. Use [[:space:]] instead.

+ 是ERE语法,而默认情况下, grep 使用BRE.将 -E 传递给grep,或将其作为 egrep 调用以启用ERE.

+ is ERE syntax, whereas by default grep uses BRE. Either pass -E to grep, or invoke it as egrep, to enable ERE.

因此:

grep -Ere "define[[:space:]]+ZEND_BEGIN_ARG_INFO_EX" ./

这篇关于为什么\ s +与grep的宏中的空间不匹配?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆