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