Regex 如何使用否定&引用;在grep reg exp中
我想找到参数中不包含sizeof()的所有malloc函数。所以我制作了正则表达式-Regex 如何使用否定&引用;在grep reg exp中,regex,bash,grep,Regex,Bash,Grep,我想找到参数中不包含sizeof()的所有malloc函数。所以我制作了正则表达式-malloc\(?!*sizeof\()); 问题是,它在reg exp在线收费时有效,但在我尝试在grep中使用它时无效 范例 cat file | grep "malloc\((?!.*sizeof\().*\);" 答复: bash: !.sizeof\: event not found 有什么想法吗?也许“!”在grep reg exps中不起作用“我会使用awk: awk '/malloc/ &a
malloc\(?!*sizeof\());
问题是,它在reg exp在线收费时有效,但在我尝试在grep中使用它时无效
范例
cat file | grep "malloc\((?!.*sizeof\().*\);"
答复:
bash: !.sizeof\: event not found
有什么想法吗?也许“!”在grep reg exps中不起作用“我会使用
awk
:
awk '/malloc/ && !/sizeof/' file
如果你需要使用grep,比如说做作业,你需要使用grep
两次:
grep malloc file | grep -v sizeof
-v
恢复匹配,这意味着grep将输出与模式不匹配的行
你说: 问题是它在reg exp online tools上有效,但在我尝试在grep中使用它时无效
看起来您的在线工具没有作为grep使用。请参阅POSIX文档(或阅读
man grep
)我将使用awk
:
awk '/malloc/ && !/sizeof/' file
如果你需要使用grep,比如说做作业,你需要使用grep
两次:
grep malloc file | grep -v sizeof
-v
恢复匹配,这意味着grep将输出与模式不匹配的行
你说: 问题是它在reg exp online tools上有效,但在我尝试在grep中使用它时无效 看起来您的在线工具没有作为grep使用。请参考POSIX文档(或阅读
man grep
)您正在使用的“…”
。Bash在“…”
中评估自己的一些构造,如$PWD
或`PWD`
或!$
检查man bash
中的!
表达式。您可以使用\
来阻止bash尝试计算从开始的内容并使其失败。
将!
传递给grep。您使用的是“…
。bash计算中的一些自己的构造。。。“
,如$PWD
或`PWD`
或!$
检查
man bash
中的!
表达式。您可以使用\
阻止bash尝试计算从!…
开始的内容并使其失败,从而将!
传递给grep。grep默认引擎遵循BRE语法,因此使用负前瞻(?!)
没有意义,可能会导致不必要的行为。请设置-P
(:--perl regexp)以便能够使用它:
cat file | grep -P 'malloc\((?!.*sizeof\().*\);'
Grep默认引擎遵循BRE语法,因此使用负前瞻
(?!…)
是没有意义的,可能会导致不需要的行为。请设置-p
(:--perl regexp)以能够使用它:
cat file | grep -P 'malloc\((?!.*sizeof\().*\);'
这与grep或regex无关。错误来自bash。grep甚至没有运行。
!
将被扩展,因为这与grep或regex无关。错误来自bash。grep甚至没有运行。!
将被扩展,因为我需要使用grep,这就是问题所在,否则我将使用grep两次:grep-malloc file | grep-v sizeof
@anticol为什么需要使用grep?我需要使用grep,这就是问题所在,否则我会使用grep两次:grep-malloc file | grep-v sizeof
@anticol为什么需要使用grep?您的regexp看起来像一个完整的perl(pcre)Grep不会理解它;如果不尝试,我打赌egrep不会理解您的regexp看起来像一个完整的perl(pcre)regex。Grep不会理解它;如果不尝试,我打赌egrep不会理解它您还应该指出历史扩展(导致OP看到的错误)通过使用单引号而不是双引号来抑制。非常感谢,这就是我想知道的:)您还应该指出,历史扩展(导致OP看到的错误)通过使用单引号而不是双引号来抑制。非常感谢,这就是我想知道的:)