2016-09-14 100 views
0

在組內的文件,我想找到包含 if (... = ...)grep的聲明(... = ...)不工作

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

所有行這是我想過去的事情,這似乎像它應該工作:

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

我想,說if (,然後什麼,但!,然後作爲一個模式ingular =,然後是任何東西,然後)

但是我卻越來越bash: !]*=[^!=]*: event not found

有人能請解釋一下我做錯了嗎?

+1

試試單引號,'''裏面的雙引號有特殊含義。 – redneb

+0

@redneb沒有錯誤,但現在我得到的東西,(.. == ..),我不想 – user101

+0

啊啊算了一下。 '找。 -type f -name「* .mm」| xargs grep -E'如果([^ =!] * = [^!=] *)'' – user101

回答

1

問題是您正在使用grep -E - -E標誌使()用於正則表達式分組的特殊字符;它們不再與字面括號相匹配。因此,在大多數情況下,您的正則表達式相當於if [^=!]*=[^!=]* - 這意味着在找到第一個=之後,即使其他=跟着它,它也會匹配。試試這個:

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

在這種情況下,移除無用的'-E'而不是轉義括號不是更好嗎? –