私はcygwinのgrepを使ってCドライブにハードコードされたパスのすべてのインスタンスを見つけます。行為:
grep -r "c:\\" .
与えられたgrep: trailing backslash
どうすればいいのか知っている人はいますか?
答え1
エラーは二重引用符()を使用したために発生します"
。これにより、コンテンツが到着する前にシェルがコンテンツを解釈できますgrep
。
試してgrep -r 'c:\\' .
みてください。
echo 'c:\' > test
ire@localhost$ cat test
c:\
ire@localhost$ grep -r 'c:\\' test
c:\
説明する:\
シェルとgrepに特別な意味があります。次の文字を文字通り解釈できるようにエスケープ文字として使用されます。
これにより、grep "c:\\"
シェルはコンテンツを取得し、リテラル文字列に変換してc:\
に渡しますgrep
。grep
単一のバックスラッシュが表示され、エスケープ文字として解釈されます。しかし、追いついたり\
逃げたりするキャラクターはありません!したがって、文句を言うのは合理的です。
'
シェルからコンテンツを保護するには、単一引用符()を使用してください。しかし、まだ2つのスラッシュが必要です。なぜなら、grep
これが探している文字通りのバックスラッシュであることを知らなければならないからです。
または、次のことができます。
grep -rF 'C:\' .
または
grep -rF "C:\\" .
grepオプション-F
(以前はfgrep
コマンドと呼ばれていました)は、grep
次のものを見つけるように指示します。固定文字列したがって、エスケープする項目はなく、バックスラッシュは特別ではありませんgrep
(ただし、二重引用符内のシェルにはまだ適用されます)。
答え2
または直接使用してください"c:/"
(Windowsでも利用可能)。