在一组文件中,我想查找包含的所有行
if ( ... = ... )
但不是if ( ... != ... )
或if ( ... == ... )
这是我尝试过的最后一件事,看起来应该可行:
find . -type f -name "*.mm" | xargs grep -E "if ([^=!]*=[^!=]*)"
我想要的格式是if (
,然后是!
,然后是单数=
,然后是)
。
但我得到了bash: !]*=[^!=]*: event not found
有人可以解释一下我做错了什么吗?
答案 0 :(得分:1)
问题是您使用grep -E
- -E
标记使(
和)
特殊字符用于正则表达式分组;它们不再与字面括号相匹配。因此,在大多数情况下,您的正则表达式相当于if [^=!]*=[^!=]*
- 这意味着,在找到第一个=
之后,即使另一个=
跟随它,它也会匹配。试试这个:
find . -type f -name "*.mm" | xargs grep -E 'if \([^=!]*=[^=!]*\)'