Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何使用否定&引用;在grep reg exp中_Regex_Bash_Grep - Fatal编程技术网

Regex 如何使用否定&引用;在grep reg exp中

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

我想找到参数中不包含sizeof()的所有malloc函数。所以我制作了正则表达式-
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看到的错误)通过使用单引号而不是双引号来抑制。非常感谢,这就是我想知道的:)