のgrepを行いたい\resources\
。どうすればいいですか?
私はもう試した:
grep \resources\
grep \\resources\\
grep "\resources\"
grep "\\resources\\"
のgrepを行いたい\resources\
。どうすればいいですか?
私はもう試した:
grep \resources\
grep \\resources\\
grep "\resources\"
grep "\\resources\\"
回答:
バックスラッシュは、多くのアプリケーションにとって特別な文字です。
シェルを含む:可能であれば単一引用符を使用して、別のバックスラッシュを使用するか、よりエレガントにエスケープする必要があります。
$ printf '%s\n' foo\\bar 'foo\bar'
foo\bar
foo\bar
ここで、コマンドはvalueを持つ2つの引数を受け取りfoo\bar
ました。これらは端末にそのままエコーされました。
(上記でprintf
はecho
、多くのecho
実装がバックスラッシュの独自の解釈も行うため、代わりに使用しました(ここでは\b
バックスペース文字に展開されます)。
ただし、バックスラッシュはの特殊文字でもありgrep
ます。このコマンドは、のような多くの特別なシーケンスを認識し\(
、\|
、\.
ように、と。同様\\
に、実際のバックスラッシュ文字にgrepにdouble を入力する必要があります。これは、シェルを使用して次のように入力する必要があることを意味します。
grep 'foo\\bar'
または同等に:
grep foo\\\\bar
(両方の行は、foo\\bar
引数としてに送信するようシェルに指示しますgrep
)。
他の多くのコマンドは、引数の一部でバックスラッシュを解釈します...そして、2レベルのエスケープが必要です(1つはシェルの解釈をエスケープし、もう1つはコマンドの解釈をエスケープします)。
ところで、シェルの場合、一重引用符は'…'
あらゆる種類の文字の解釈を防ぎますが、二重引用符はそれらの一部のみを防ぎます。特に$
、`
および\
内のアクティブな文字のまま"…"
です。
使用することもできますfgrep
(これはフラグgrep
と一緒-F
です)。これにより、grepはパターンを固定文字列として解釈します(つまり\
、aをリテラルとして扱います\
)。シェルによる拡張からバックスラッシュを保護する必要があります。
grep -F '\resources\'
..\
とも、と'..\\'
私は私が望んでいた結果を取得できませんでした。grep -F '..\'
欲しいものを手に入れた!ありがとう
grep
バックスラッシュを表すには、4つのバックスラッシュが必要です。
grep "\\\\resources\\\\"
grep
別のバックスラッシュをエスケープするためにバックスラッシュを1つだけ必要としますが、シェルではバックスラッシュを引用符で囲む必要があります。二重引用符("
)はバックスラッシュを引用しませんが、バックスラッシュは引用します。そのため、例の二重引用符は何もせず、代わりに4つのバックスラッシュが必要です。
grep '\\resources\\'