2011-09-14 58 views
5

我寫它有命令如下執行腳本:意外的EOF而尋找匹配`「」

cat /abc | grep -v ^# | grep -i root | sed -e '\''s/"//g'\'' | awk '\''{print $2}'\'' 

當運行在SunOS腳本,我收到以下錯誤是:

test: line 1: unexpected EOF while looking for matching `"' 
test: line 3: syntax error: unexpected end of file 

使用不同的選項嘗試..但沒有運氣。

需要有人幫我鑑定什麼是在上面的命令丟失。

+0

你想做什麼?換句話說,你的輸入和輸出是什麼?我有一種感覺,你可以用awk完成你的任務。 –

回答

2

那些逃生是什麼?!

cat /abc | grep -v '^#' | grep -i root | sed -e '\''s/"//g'\'' | awk '\''{print $2}'\'' 
               ^  ^  ^   ^

你的問題是有:

sed -e '\''s/"//g'\'' 
      ^unmatched 
+0

表達式中的雙引號是否導致此錯誤? – Mrun

+0

我用以下方法試過: cat/abc | grep -v ^#| grep -i root | sed -e \\「{print $ 2} \' o/p是: bash-2.05#bash -x -v test cat/abc | grep - v ^#| grep -i root | sed -e \'/ \「// g \'| awk \'{print $ 2} \' + cat/ + grep -v'^#' + grep -i root + sed -e'''s /「// g''''' 無法識別的命令:'s /「// g' + awk''''''''''''''''''' awk:第1行附近的語法錯誤 awk:第1行附近出錯 – Mrun

+0

我如何轉義腳本中單引號? – Mrun

0

的報價是完全錯誤的。爲什麼你使用單引號,反斜線,單引號,單引號,並且總是按照這個順序?無論如何,你有一個沒有加引號的雙引號,所以shell希望你爲引用的字符串添加一個結束引號,該引號以該雙引號開頭。

作爲一種風格,你也應該失去Useless Use of Cat,並考慮如何簡化你的腳本。至少有:

grep -v ^# /abc | grep -i root | sed -e 's/"//g' | awk '{print $2}' 

...但在實踐中

awk '/^#/ { next } /[Rr][Oo][Oo][Tt]/ { gsub ("\"",""); print $2 }' /abc 

因爲一些在awksed腳本的字符有特殊含義的外殼,我們把它們放在單引號。如果您需要在腳本中使用單引號,則需要雙引號;一個頻繁的模式是在雙引號內的單引號中有一個字符串,如下所示:echo '"'"'"。這個回聲"(引用單引號)緊接着是'(用雙引號引用)。

編輯更新了報價問題的分析;添加代碼示例;更正的代碼示例。最終編輯更正了awk腳本中引用的gsub,並添加了一小段引用的討論。

+0

這不是一個雙引號''',它只是兩個單引號並排('' - >''''),這沒有意義, – c00kiemon5ter

+0

sed -e's /「// g'in this,the單引號使用\轉義,但反斜槓用單引號括起來。 – Mrun

+0

@ c00kiemon5ter在我看到您的評論之前,我注意到並編輯了我的回覆。 – tripleee