我想在参数中找到所有不包含sizeof()的malloc函数。所以我做了正则表达 - malloc\((?!.*sizeof\().*\);
问题是它在reg exp online tolls工作但不是当我尝试在grep中使用它时。
实施例
cat file | grep "malloc\((?!.*sizeof\().*\);"
解答:
bash: !.sizeof\: event not found
有什么想法吗?也许 ”?!”在grep reg exps中不起作用“?
答案 0 :(得分:3)
Grep默认引擎遵循BRE语法,因此使用否定前瞻(?!...)
毫无意义,可能会导致不必要的行为。设置-P
(: - perl-regexp)以便能够使用它:
cat file | grep -P 'malloc\((?!.*sizeof\().*\);'
答案 1 :(得分:1)
我会使用awk
:
awk '/malloc/ && !/sizeof/' file
如果您需要使用grep,让我们说做作业,您需要使用grep
两次:
grep malloc file | grep -v sizeof
-v
恢复匹配,这意味着grep将输出与模式不匹配的行。
你说:
问题是它适用于reg exp在线工具,但在我尝试在grep中使用时却没有。
您的在线工具似乎没有使用POSIX regular expressions作为grep。请参阅POSIX文档(或阅读man grep
)
答案 2 :(得分:1)
您正在使用"..."
。 Bash评估"..."
内部的一些结构,如$PWD
或`pwd`
或!$
。
检查man bash
!
个表达式。您可以使用\
来阻止bash尝试评估并将! ...
从!
传递到grep的内容失败。