为什么\ s +与grep的宏中的空间不匹配? [英] why \s+ do not match the space in macro with grep?
本文介绍了为什么\ 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 asegrep
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屋!
查看全文