2012-02-20 10 views
82

के लिए अज्ञात विकल्प हालांकि मैं इस त्रुटि मिलती है:

sed: -e expression #1, char 34: unknown option to `s' 

मुझे समझ नहीं आता क्यों के बाद से इस पूरी तरह से काम करता है:

sed -i -e "s/.*wbspassword.*/ \"wbspassword\": \"$password\",/" $user_conf 

कोई विचार क्या मैं गलत कर रहा हूं?

क्या यह समस्या हो सकती है? ftp_login_template=\${user}:${password}:24:86::\/var\/lib\/clit.${user}\/downloads:\/bin\/false\"

+6

* * बीएसडी त्रुटि संदेश (ओएसएक्स समेत) "विकल्प कमांड में खराब ध्वज" है - इसमें इसे कुछ और अधिक गूढ़ बनाने के लिए यहां शामिल है। – tripleee

उत्तर

201

समस्या स्लेश के साथ है: आपके चर में उन्हें शामिल है और अंतिम कमांड sed "s/string/path/to/something/g" जैसा होगा, जिसमें बहुत अधिक स्लेश होते हैं।

replacement="/my/path" 
sed -e "[email protected]@[email protected]" 

ध्यान दें कि यह बुलेट प्रूफ नहीं है: अगर प्रतिस्थापन स्ट्रिंग बाद में शामिल

के बाद से sed परिसीमक के रूप में किसी भी वर्ण ले जा सकते हैं, तो आप एक और एक है कि अपने प्रतिस्थापन स्ट्रिंग में प्रकट नहीं होता उपयोग करके देख सकते @ यह उसी कारण से टूट जाएगा, और \1 जैसे बैकस्लैश अनुक्रमों को अभी भी sed नियमों के अनुसार व्याख्या किया जाएगा।

+26

भविष्य के उपयोगकर्ताओं की मदद करने के लिए बस एक नोट, क्योंकि मुझे यह उत्तर उपयोगी भी मिला है। मूल पोस्टर की सबसे अधिक संभावना उसके प्रतिस्थापन में थी (संभवतः चर में छिपी हुई) जिसमें आगे की कमी थी। उन स्लेशों में से पहला एक सामना करने के बाद, sed को प्रतिस्थापन समाप्त कर दिया गया, और जो कुछ भी विकल्प के रूप में आया (जैसे 'जी')। –

+0

आह हाँ, 10 बार देखने के बाद मुझे स्लैश दिखाई देता है। तो मैं इसे कैसे ठीक करूँ? – ppumkin

+3

अच्छी तरह से किया गया है (बस '' '' '' के साथ परिवर्तनीय अभिव्यक्तियों को लपेटना याद रखें अन्यथा आपको '$ सामग्री' की सामग्री के बजाय आपके अंतिम परिणाम में बहुत सी '$ सामग्री' मिल जाएगी :) –

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