2011-09-14 30 views
5

Ben aşağıda yürütülecek komutu sahip bir komut dosyası yazıyorum eşleşmesi `"' ararken:beklenmedik 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 üzerinde komut dosyası çalıştıran

i hata altına alıyorum

farklı seçeneği ile çalıştı .. ama hayır şans.

birileri beni yukarıdaki komuta eksik belirlemekte yardımcı lazım.

+0

Ne yapmaya çalışıyorsunuz? Diğer bir deyişle, giriş ve çıkışınız nedir? Görevini sadece awk ile başarabileceğini hissediyorum. –

cevap

2

Bu kaçmalar nelerdir?

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

Kişisel sorun var:

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

İfadedeki çift tırnak bu hataya neden oluyor mu? – Mrun

+0

Aşağıdakilerle denedim: kedi/abc | grep -v^# | grep -i kökü | o/p şudur: o/p: bash-2.05 # bash -x -v testi kedi/abc | grep - v^# | grep -i root | sed -e \ '/ \ "// g \' | awk \ '{print $ 2} \' + cat/ + grep -v '^ #' + grep -i kökü + sed -e '' \ '' s/"// g '\' '' Tanınmayan komut: 's/"// g' + awk '' \ '' {print ''} '\' '' awk: satırın yakınında sözdizimi hatası 1 awk: satırın yakınında kurtarılıyor 1 – Mrun

+0

Nasıl çıkabilirim senaryoda tek alıntı? – Mrun

0

alıntı tamamen yanlış. Neden tek tırnak, ters eğik çizgi, tek tırnak, tek fiyat teklifi ve her zaman bu sırayla kullanıyorsunuz? Ne olursa olsun, bir çift tırnaklı alıntı var, bu yüzden kabuk, bu açılış çift alıntı ile başlayan alıntı dizesi için kapanış teklifi eklemenizi bekler.

Tarz olarak, Useless Use of Cat'u da kaybetmeli ve komut dosyanızı nasıl basitleştireceğinizi düşünmelisiniz. En azından:

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

... ama

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

awk ve sed komut bazı karakterleri kabuğuna özel bir anlama sahip olduğundan pratikte

yılında, biz tek tırnak koyun. Bir komut dosyasında tek tırnak işaretine sahip olmanız gerekiyorsa, bunları iki kez alıntı yapmanız gerekir; sık kullanılan bir desen, aşağıdaki gibi çift tırnakta bir dizgiye bitişik tek tırnak içinde bir dizeye sahip olmaktır: echo '"'"'". Bu ecz " (tek tırnak içinde alıntılanmıştır) hemen ardından ' (çift tırnak içinde alıntılanmıştır).

Edit Güncelleştirme probleminin analizi; eklenen kod örneği; düzeltilmiş kod örneği. Son düzenleme, awk komut dosyasında gsub alıntılanmasını düzeltir ve küçük bir alıntılama tartışması ekler.

+0

bu bir çifte alıntı değil '' ', sadece iki tane tek tırnak yan yana ('' ->' ''') .Bu anlamlı değil – c00kiemon5ter

+0

sed -e' s/"// g" bu, tek tırnak işareti, \, ancak ters eğik çizgi tek tırnak içine alınır .. – Mrun

+0

@ c00kiemon5ter Yorumunuzu görmeden önce cevabımı fark ettim ve düzenledim. – tripleee