2011-08-04 69 views
6

我試圖掃描錯誤日誌中有503個錯誤的行,所以我正在尋找" 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」? 「type 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 'grep "\" 503 " access.log' 

你是不知何故叫bash -c ...。也許間接。你需要指出你是如何調用它來找出碰撞中的引號。

+0

否,直接在炮彈中。我已經嘗試過你提示沒有運氣的兩個例子。 – dtbarne

+0

這很奇怪。你能發佈「type grep」和「echo $ 0」的輸出嗎? –

1

要調試這樣的奇怪效果,請使用「set -x」顯示shell擴展以及計算機對您的命令的看法。

0

我相信我現在正在工作(不確定,因爲我沒有結果,但沒有得到一個錯誤)。

的原因是因爲我使其通過SSH如下命令,我相信SSH是做一些掛羊頭賣狗肉逃生:

ssh 123.123.123.123 grep '" 503 ' access.log 

它Modifiying這似乎是修復:

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

感謝大家的時間。

+2

這不是ssh做的詭計,它是shell。你的本地shell解釋單引號,並從''「503」參數中刪除它們,然後將這些參數傳遞給ssh,然後ssh將它獲得的參數傳遞給遠程系統的shell。一個無與倫比的雙引號字符(可能還有一點比這更多,但這是一般的想法。) –

+0

@Keith完全正確。由於您的命令會被解釋兩次(一次由您的本地shell執行,而另一次由遠程shell執行),通常必須引用一次的任何內容都必須被引用兩次。 – jw013

+0

謝謝,雖然我意識到了這一點。只是更容易稱它爲騙局。 :) – dtbarne