パターンで \$ を使用する場合、 grep end egrep のさまざまな動作を理解するのに苦労しています。
もう少し詳しく言うと:
grep "\$this->db" file # works
egrep "\$this->db" file # does not work
egrep "\\$this->db" file # works
誰かが理由を教えてくれたり、説明をリンクしたりできますか? どうもありがとうございました。
バックスラッシュはシェルのエスケープ処理によって消費されているため、最初の 2 つのケースでは正規表現は$this->db. 違いは、正規表現の末尾にないgrepaを通常の文字として扱いますが、行末に一致する正規表現として扱います。$egrep
最後のケースでは、バックスラッシュが 2 つあると、バックスラッシュが に送信されegrepます。これは をエスケープする$ため、行末に一致するのではなく、通常の文字として扱われます。
参照man grep:
-E, --extended-regexp
Interpret PATTERN as an extended regular expression (ERE, see below). (-E is specified by POSIX.)
正規表現が (を使用してegrep) 有効になっている場合、バックスラッシュなどのメタ文字はバックスラッシュでエスケープする必要があります。したがって、\\リテラルのバックスラッシュに一致させる必要があります。