2011-10-04 17 views
12

मैं शैल स्क्रिप्टिंग के लिए नया हूं लेकिन यह त्रुटि प्राप्त कर रहा हूं और क्या समझ सकता हूं।sed त्रुटि प्राप्त करना

sed: 1: "/Users/local/Do ...": extra characters at the end of d command 
sed: 1: "/Users/local/Do ...": extra characters at the end of d command 
sed: 1: "/Users/local/Do ...": extra characters at the end of d command 
sed: 1: "/Users/local/Do ...": extra characters at the end of d command 

यहाँ स्क्रिप्ट मैं चल रहा हूँ

for fl in $(S_convertPath ${RESOURCE_DIR}/db)/db.changelog-*xml; do 
    sed -i "s/HOSTNAME/${IP_ADDRESS}/g" $fl 
done 

धन्यवाद

है

उत्तर

43

यह देखते हुए कि sed आप एक delete line आदेश (d) चला रहे हैं सोचने के लिए लगता है, आप उत्पादन कर सकते हैं यह देखने के लिए कमांड में है कि आपके पर्यावरण का चर:

for fl in $(S_convertPath ${RESOURCE_DIR}/db)/db.changelog-*xml; do 
    echo sed -i "s/HOSTNAME/${PSM_SERVER_ADDRESS}/g" $fl 
done 

PSM_SERVER_ADDRESS आपके sed कमांड को दूषित कर रहा है (और इसे साफ़ करने के लिए संसाधित होने की आवश्यकता हो सकती है)। एक तरह से यह करने के लिए (बशर्ते आपके पास हाल ही में एक पर्याप्त sed), सीमांकक कि वातावरण चर में दिखाई नहीं देते उपयोग करने के लिए उदाहरण के लिए होगा:

sed -i "s?HOSTNAME?${PSM_SERVER_ADDRESS}?g" $fl 

जब से तुम इस जवाब को स्वीकार कर लिया गया है, मैं साथ ही आपको मिली अतिरिक्त समस्या के लिए संकल्प भी जोड़ सकते हैं। ऐसा लगता है कि लिनक्स के विपरीत बीएसडी sed में आवश्यकता है कि आप -i विकल्प का विस्तार प्रदान करते हैं। तो, लिनक्स की अनुमति देता है, जबकि: एक खाली बैकअप प्रत्यय के साथ

sed -i "" "sed-command" 

:

sed -i "sed-command" 

यथा-स्थान संपादित करने के लिए, बीएसडी संस्करण की जरूरत है।

इसके बिना, sed आपके आदेश को एक्सटेंशन के रूप में और आपके पहले फ़ाइल नाम को कमांड के रूप में उपयोग कर सकता है।

+2

यह है। मान 'PSM_SERVER_ADDRESS' एक पथ है (जिसमें '/' वर्ण हैं) इसलिए एस कमांड उन '/' वर्णों को इसके delimiters के रूप में व्याख्या करता है (उदाहरण के लिए, 's/HOSTNAME // उपयोगकर्ता/डेविडकावनघ/पथ/जी'। वैकल्पिक की तरह दिखता है delimiters का उपयोग किया जाना चाहिए। शायद @ HOSTNAME @ $ {PSM_SERVER_ADDRESS}/g'। – jamessan

+0

IP_ADDRESS एक ऐसे फ़ंक्शन के बराबर है जो मेजबाननाम का उपयोग कर आईपी प्राप्त करता है- सभी प्लेटफॉर्म पर उपयोग के लिए – daverocks

+0

@daverocks, आप _still_ को संशोधित स्क्रिप्ट चलाने की आवश्यकता है मैंने आपके द्वारा किए गए परिवर्तनों के साथ-साथ लाइन को प्रतिबिंबित करने के लिए प्रदान किया है। यह जानने का एकमात्र तरीका है कि 'sed' को दिए गए आदेश क्या हैं। – paxdiablo

संबंधित मुद्दे