2011-09-14 6 views
5

मैं एक स्क्रिप्ट जो नीचे के रूप में निष्पादित करने के लिए आदेश है लिख रहा हूँ:अप्रत्याशित EOF मिलान `" 'की तलाश में है, जबकि

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

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

जब पर SunOS स्क्रिप्ट चलाने, मैं त्रुटि नीचे हो रही है

अलग विकल्प के साथ की कोशिश की .. लेकिन कोई भाग्य।

किसी मेरी मदद की पहचान क्या उपरोक्त आदेश में याद आ रही है की आवश्यकता है।

+0

आप क्या करने की कोशिश कर रहे हैं? दूसरे शब्दों में, आपका इनपुट और आउटपुट क्या है? मुझे लगता है कि आप अपने काम को केवल अजीब के साथ पूरा कर सकते हैं। –

उत्तर

2

क्या बच निकले हैं?

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

आपकी समस्या है:

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

क्या यह अभिव्यक्ति में डबल कोट इस त्रुटि का कारण बन रहा है? – Mrun

+0

मैंने निम्नलिखित के साथ प्रयास किया: बिल्ली/एबीसी | grep -v^# | grep -i रूट | sed -e \ 's/\ "// g \' | awk \ '{print $ 2} \' ओ/पी है: बैश-2.05 # bash -x -v परीक्षण बिल्ली/एबीसी | grep - v^# | grep -i root | sed -e \ 's/\ "// g \' | अजीब \ '{प्रिंट $ 2} \' + बिल्ली/ + grep -v '^ #' + grep -i रूट + sed -e '' '' s/"// g '\' '' अपरिचित कमांड: 's/"// g' + awk '' '' {print ''} '\' '' awk: लाइन 1 awk के समीप वाक्यविन्यास त्रुटि: लाइन के निकट बाहर निकलना 1 – Mrun

+0

मैं कैसे बचूं लिपि में एक उद्धरण? – Mrun

0

के हवाले से सब गलत है। आप एकल उद्धरण, बैकस्लैश, सिंगल कोट, सिंगल कोट, और हमेशा उस क्रम में क्यों उपयोग करते हैं? भले ही, आपके पास एक डबल डबल कोट है, इसलिए शैल आपको उद्धृत स्ट्रिंग के लिए एक समापन उद्धरण जोड़ने की अपेक्षा करता है जो उस डबल डबल कोट के साथ शुरू होता है।

शैली के मामले में, आपको 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 

क्योंकि awk और sed लिपियों में पात्रों में से कुछ खोल करने के लिए एक विशेष अर्थ नहीं होता में, हम उन्हें एकल उद्धरण में डाल दिया। यदि आपको एक स्क्रिप्ट में सिंगल कोट्स की आवश्यकता है, तो आपको उन्हें दोबारा उद्धृत करने की आवश्यकता है; एक लगातार पैटर्न डबल कोट्स में एक स्ट्रिंग के समीप एकल कोट्स में स्ट्रिंग रखना है, जैसे: echo '"'"'"। यह echos " (सिंगल कोट्स में उद्धृत) तुरंत ' (डबल कोट्स में उद्धृत) के बाद।

संपादित करें उद्धरण समस्या का अद्यतन विश्लेषण; जोड़ा कोड उदाहरण; सही कोड उदाहरण। अंतिम संपादन अजीब स्क्रिप्ट में gsub का उद्धरण सुधारता है, और उद्धरण के बारे में एक छोटी सी चर्चा को जोड़ता है।

+0

यह दोहरा उद्धरण नहीं है, "यह सिर्फ दो सिंगल कोट्स साइड साइड ('' -> '' '' 'है)। इसका कोई मतलब नहीं है। – c00kiemon5ter

+0

इस में सेड-ए /" // जी' है, सिंगल कोट्स का उपयोग करके बच निकला है, हालांकि बैकस्लैश सिंगल कोट में संलग्न है .. – Mrun

+0

@ c00kiemon5ter मैंने आपकी टिप्पणी देखने से पहले मेरी प्रतिक्रिया देखी और संपादित किया। – tripleee