2017-01-21 8 views
1

私はすべてline breaks after some binary operatorsをgit bashを使ってWindowsマシンでgrepしようとしています。動作しませんでした、次のコマンドを試してみましたgit grep <改行を含む正規表現>

$ git grep "[+-*\|%]\ *\n" 
fatal: command line, '[+-*\|%]\ *\n': Invalid range end 

$ git grep "[+\-*\|%]\ *\n" 
fatal: command line, '[+\-*\|%]\ *\n': Invalid range end 

[OK]を、私は、方法がわからない「 - 」文字セットで、まだ\nそれを削除した後は、文字通りの文字nに一致します:

$ git grep "[+*%] *\n" 
somefile.py:   self[:] = '|' + name + '=' 
             ^^^ 

一度(\\n)をバックスラッシュをエスケープしても効果はありませんし、それを2回エスケープ(\\\n)正規表現は(文字通り)\nに一致するようになります。

grepの正しい方法は何ですか?

答えて

3

私は、方法がわからない「 - 」文字にあなたは文字セットに含めたい場合はダッシュ文字(-)をエスケープする必要はありません

設定しました。最初の文字または最後の文字をセットに入れた場合、その特殊な意味はありません。

また、|を文字範囲内にエスケープする必要はありません。 ]をエスケープする場合は^(範囲内の最初の文字の場合)、-(範囲内の最初または最後の文字でない場合)、]および\以外の文字はすべてリテラル文字の範囲で意味する(つまり、特別な意味はない)。

\nを正規表現に入れる必要もありません。グリッピングツールは、デフォルトで一度に1行ずつ正規表現を一致させようとし、git grepは同じ結果を返します。行の最後で正規表現をマッチさせる必要がある場合は、正規表現の最後の文字として$(行のアンカーの終わり)を入力します。

正規表現は[-+*|%] *$である必要があります。一緒に入れて

は、完全なコマンドラインは次のとおりです。

git grep '[-+*|%] *$' 
+0

ありがとう!私は 'grep '[ - + * |%] \ s * $''を使ってウィンドウの行末を説明しなければなりませんでした。私は[grep manual](https://www.gnu.org/software/grep/manual/grep.html#Character-Classes-and-Bracket-Expressions)で答えを見つけることができたことが判明しました。参考:[バージョン管理されたソースコードを検索したい場合は、git grepをプレーンgrepよりも使用する方が良いですか?](http://stackoverflow.com/questions/175576​​84/is-it-better-to-use-git- grep-than-plain-grep-if-we-want-to-version-in-versioned-s) – AXO

関連する問題