2016-09-14 5 views
0

を働いていない、私はこれがある if (... = ...)grepの声明(... = ...)ファイルのグループ内で

なくif (... != ...)またはif (... == ...)

を含むすべての行を検索したいのですがそれのように思える私が試した最後のものは、動作するはずです:

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

は私のように、その後 if (!が、その後何を、と言うパターンが欲しいです受注 =、次に何か、次に )

誰かが私が間違ってやっているか説明していただけますか?私はbash: !]*=[^!=]*: event not found

を取得していますか

+1

二重引用符で囲まれた '! 'は特別な意味を持ちます。 – redneb

+0

@rednebエラーはありませんが、今は私が望んでいないもの(.. == ..)を手に入れています。 – user101

+0

ああ、それを理解しました。 'find。 -type f -name "* .mm" | xargs grep -E 'if([^ =!] * = [^!=] *)' ' – user101

答えて

1

問題は、あなたがgrep -Eを使用していることである - -Eフラグは正規表現のグループ化に使用()特殊文字になります。彼らはもはやリテラルカッコと一致しません。したがって、ほとんどの場合、正規表現はif [^=!]*=[^!=]*に相当します。つまり、最初に=が見つかった後は、別の=が続きても一致します。これを試してください:

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

この場合、括弧をエスケープするのではなく、無駄な '-E'を削除する方が良いのですか? –