(... = ...)的grep语句不起作用

时间:2016-09-14 20:38:48

标签: regex bash grep pattern-matching

在一组文件中,我想查找包含的所有行 if ( ... = ... )

但不是if ( ... != ... )if ( ... == ... )

这是我尝试过的最后一件事,看起来应该可行:

find . -type f -name "*.mm" | xargs grep -E "if ([^=!]*=[^!=]*)"

我想要的格式是if (,然后是!,然后是单数=,然后是)

但我得到了bash: !]*=[^!=]*: event not found

有人可以解释一下我做错了什么吗?

1 个答案:

答案 0 :(得分:1)

问题是您使用grep -E - -E标记使()特殊字符用于正则表达式分组;它们不再与字面括号相匹配。因此,在大多数情况下,您的正则表达式相当于if [^=!]*=[^!=]* - 这意味着,在找到第一个=之后,即使另一个=跟随它,它也会匹配。试试这个:

find . -type f -name "*.mm" | xargs grep -E 'if \([^=!]*=[^=!]*\)'