grepをしたいです\resources\
。どうすればいいですか?
私は試した:
grep \resources\
grep \\resources\\
grep "\resources\"
grep "\\resources\\"
答え1
多くのアプリケーションでは、バックスラッシュは特殊文字です。
シェルを含む:他のバックスラッシュを使用するか、エレガントにエスケープする必要があります。一つ可能な場合はいつでも見積もり:
$ printf '%s\n' foo\\bar 'foo\bar' foo\bar foo\bar
ここで、コマンドは値を持つ2つのパラメータを受け取ります。
foo\bar
これは端末にそのまま反映されます。(上記ではバックスラッシュを独自に解釈する多くの実装を
printf
代わりに使用しています(ここではバックスペース文字に拡張されています)。echo
echo
\b
しかし、バックスラッシュは特殊文字でもあります
grep
。このコマンドは、などの多くの特殊シーケンスを認識できます\(
。したがって、同様に、実際のバックスラッシュ文字でdoubleをgrepに提供する必要があります。これは、シェルを使用して次のように入力する必要があることを意味します。\|
\.
\\
grep 'foo\\bar'
または均等に:
grep foo\\\\bar
(両方の行はシェルに
foo\\bar
引数として渡すように指示しますgrep
)。他の多くのコマンドはいくつかの引数でバックスラッシュを解釈し、2つのレベルのエスケープが必要です(シェル解釈のための1つのレベル、コマンド解釈のための1つのレベル)。
ちなみに、シェルの場合、一重引用符は'…'
すべての種類の文字の解釈を防ぎますが、二重引用符はそれらのほんの一部だけを防ぎます。具体的には$
、`
と\
の接続保持文字"…"
。
答え2
使用することもできますfgrep
(フラグのみgrep
)-F
。これにより、grepはパターンを固定文字列として解釈します(つまり、aを\
リテラルとして扱います\
)。シェル拡張からバックスラッシュを保護する必要があります。
grep -F '\resources\'
答え3
grep
必要4つバックスラッシュはバックスラッシュを表します。
grep "\\\\resources\\\\"