2011-08-04 4 views
6

私はエラーログをスキャンしようとしています。したがって、私は" 503(見積もりスペース503)のためにグロッピングしています。grep引用符で

これは簡単なようだが、それは動作しません。

grep '" 503 ' access.log 

私は次のエラーを取得する:あなたは、いくつかの言語で)(いくつかのシステムを介してそれを実行しているよう

bash: -c: line 0: unexpected EOF while looking for matching `"' bash: -c: line 1: syntax error: unexpected end of file

+1

これは動作するはずです。あなたはgrepやそのようなエイリアスをしなかったでしょうか? "grep"? "grep"と入力しますか? – pyroscope

+0

エラーメッセージに「bash -c」と表示されるので、一重引用符を一重引用符に埋め込むような処理をしていますか? –

+0

うーん、あなたが持っているのとまったく同じように、私のためにbashで動作します。 –

答えて

0

問題は、.bashrcの間違った指示が原因でした。

8

は思えます、あなたじゃない?試してみてください:

grep '\" 503 ' access.log 

か:

シェルで直接
grep "\" 503 " access.log 

をちょうどgrep '" 503 ' access.logが動作します。あなたの問題を再現するには、私がしなければならない:

bash -c 'grep '\" 503 ' access.log' 

これは本当に構文エラーです。その作業を行うために、私が必要とする:あなたは何とかbash -c ...を呼び出している

bash -c 'grep "\" 503 " access.log' 

。たぶん間接的に。あなたはどのような引用符が衝突しているかを把握するために呼び出される方法を理解する必要があります。

+0

いいえ、直接シェルにあります。私はあなたが運がないと示唆している両方の例を試しました。 – dtbarne

+0

これは奇妙です。あなたは "grep"と "echo $ 0"の出力を投稿できますか? –

1

このような変なエフェクトをデバッグするには、 "set -x"を使用してシェルの展開を表示し、コンピュータがコマンドについてどのように考えるかを表示します。

0

私はそれが今働いていると信じています(私は結果が得られなかったので確信が持てませんが、エラーは出ませんでした)。私は次のようにsshコマンドを通すことだと私はSSHは、いくつかのエスケープ策略をしていると考えているため

理由は、これにそれを変性する

ssh 123.123.123.123 grep '" 503 ' access.log 

は修正のようだ:

ssh 123.123.123.123 "grep '\" 503 ' access.log" 

ありがとうございます。

+2

これはトリッキーなことをしているsshではなく、シェルです。あなたのローカルシェルは一重引用符を解釈し、それを ''" 503 ''引数から取り除き、それらの引数をsshに渡します。sshはそれをそのままリモートシステムのシェルに渡します。 (これは多分それ以上のことですが、それは一般的な考えです) –

+0

@Keithはまさに正しいです。あなたのコマンドは2度解釈されます(1度はローカルシェルで、もう1度はリモートシェルで解釈される)ので、通常は一度引用しなければならないものは、二重引用符で囲む必要があります。 – jw013

+0

ありがとう、私はそれを知っていた。ちょっと手に負えないほど簡単でした。 :) – dtbarne