为什么 s 与宏中的空间与GREP不匹配



我想搜索 ZEND_BEGIN_ARG_INFO_EX的宏定义,

所以我运行命令

 grep   "defines+ZEND_BEGIN_ARG_INFO_EX" -r  ./ 

但是什么也没找到。

所以,我尝试

grep   "defines*ZEND_BEGIN_ARG_INFO_EX" -r  ./

成功返回ZEND_BEGIN_ARG_INFO_EX的定义,它返回

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

我的问题:

为什么s+不匹配宏中的空间?

我认为它应该至少匹配一个空间。

这里有两个问题:

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

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

因此:

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

Linux随附的标准 GREP不接受+,仅接受*。您可以这样说:

grep "definess*ZEND_BEGIN_ARG_INFO_EX" -r ./ 

或此

grep -E "defines+ZEND_BEGIN_ARG_INFO_EX" -r ./ 

最新更新