0

アポストロフィを含む行を探して、私と同じように見える表現をいくつか試しました。ただし、一部は機能し、一部は機能しませんでした。なぜ私は次の動作を得たのですか:

egrep \' file      # works as expected

egrep "\'" file    # seems to return all lines

egrep "[\']" file  # works as expected

egrep '\'' file    # seems to be waiting for more input
4

2 に答える 2

5

一重引用符と二重引用符には、エスケープに関して違いがあります。echo実際に何が送信されるかを確認するために前に置いてくださいegrep

$ echo egrep \' file
egrep ' file
$ echo egrep "\'" file
egrep \' file
$ echo egrep "[\']" file
egrep [\'] file
$ echo egrep '\'' file
>

最後のケースは、まだ一重引用符で囲まれた式の中にあるため、より多くの入力を求めるプロンプトです。一重引用符でエスケープされた引用符(\')ではありません(一重引用符をエスケープする方法ではないため)。一重引用符間のバックスラッシュです。末尾の冒頭の引用符付き。

ちなみに、一重引用符で囲まれた文字列で一重引用符をエスケープするには、次のような構造を使用します。

$ echo 'foo'\''bar'
foo'bar

\'これが実際に行っているのは、2つの一重引用符で囲まれた文字列の間に裸のリテラルquote()を置くことです。これらはすべて暗黙的に連結されます。

なぜ"\'"すべての行に一致するのかわかりません(しかし、実際に一致しているようです)。

于 2012-07-28T07:17:13.713 に答える
0

'引用符で一致させようとしている場合は、複雑にしすぎていると思います"

echo "'" | grep "'"
于 2012-07-28T12:40:53.517 に答える