次に、「\」文字を含む行があるかどうかを確認します。私は試した grep "\\" XXFile
しかし、それは「トレーリングバックスラッシュ」を示唆しています。しかし、私が試したときgrep '\\' XXFile
OK。誰も最初のケースが実行できない理由を説明できますか?ありがとう。
違いは、シェルがバックスラッシュを処理する方法にあります。
"\\"
は二重引用符で囲まれ、シェルはバックスラッシュエスケープを解釈し、文字列\
からgrepへ。 Grepは、その後に文字がないバックスラッシュを検出するため、「末尾のバックスラッシュ」警告を発します。二重引用符を使用する場合は、シェルとgrepの2つのレベルのエスケープを適用する必要があります。結果: "\\\\"
。
'\\'
は一重引用符で囲まれ、シェルはnot解釈を行います。つまり、grepは文字列\\
両方のバックスラッシュはそのまま。 Grepはこれをエスケープされたバックスラッシュとして解釈するため、ファイルでリテラルのバックスラッシュ文字を検索します。
それが明確でない場合は、echo
を使用して、シェルが何をしているかを正確に確認できます。 echo
はバックスラッシュの解釈を行わないため、表示されるのはシェルが渡したものです。
$ echo "\\"
\
$ echo '\\'
\\
コマンドを次のように書くこともできます。
grep "\\\\" ...
これには、bashが2つの単一のバックスラッシュに変換する2組のバックスラッシュがあります。この新しいペアは、エスケープされたバックスラッシュとしてgrepに渡され、必要なものが取得されます。