0

パターンで \$ を使用する場合、 grep end egrep のさまざまな動作を理解するのに苦労しています。

もう少し詳しく言うと:

grep "\$this->db" file   # works

egrep "\$this->db" file  # does not work

egrep "\\$this->db" file # works

誰かが理由を教えてくれたり、説明をリンクしたりできますか? どうもありがとうございました。

4

2 に答える 2

1

バックスラッシュはシェルのエスケープ処理によって消費されているため、最初の 2 つのケースでは正規表現は$this->db. 違いは、正規表現の末尾にないgrepaを通常の文字として扱いますが、行末に一致する正規表現として扱います。$egrep

最後のケースでは、バックスラッシュが 2 つあると、バックスラッシュが に送信されegrepます。これは をエスケープする$ため、行末に一致するのではなく、通常の文字として扱われます。

于 2013-10-02T22:01:21.797 に答える
1

参照man grep:

-E, --extended-regexp
              Interpret PATTERN as an extended regular expression (ERE, see below).  (-E is specified by POSIX.)

正規表現が (を使用してegrep) 有効になっている場合、バックスラッシュなどのメタ文字はバックスラッシュでエスケープする必要があります。したがって、\\リテラルのバックスラッシュに一致させる必要があります。

于 2013-10-02T22:00:25.353 に答える