我想搜索 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 ./