2011-02-05 12 views
5

से एक sed कमांड को पोर्ट करने में मदद की ज़रूरत है, यह आपके लिए एक गुरु गुरु है। मैं वास्तव में पूरी तरह से इसे अलग करने के लिए sed के बारे में पर्याप्त नहीं जानता। यह कुछ मानक लिनक्स डिस्ट्रो पर लिखा गया था और मुझे इसे ओएसएक्स पर चलाने की आवश्यकता है।डेबियन से ओएसएक्स

COMPILE_FILES=$(sed -nr '/<script type="text\/javascript"/ { s%^.*src="\{\$baseUrl\}/([^"]+)".*$%\1%p }' templates/common/minifiedScripts.tpl) 

पहली बात यह है कि आर ध्वज sed के ओएसएक्स संस्करण पर मौजूद नहीं है। मैंने सोचा कि बराबर है -ई, तो इसे बदल दिया। लेकिन फिर मुझे मिलता है:

sed: 1: "/<script type="text\/ja ...": bad flag in substitute command: '}' 

धन्यवाद!

+0

Dangit, मैं गलत सवाल पर बंद करने के लिए मतदान किया। कृपया इस प्रश्न पर मेरे करीबी वोट को अनदेखा करें, और इसके बजाय [अन्य] [http://stackoverflow.com/questions/4904572/) को डुप्लिकेट करें। –

उत्तर

9

ओएस एक्स sed अर्धविरामों का उपयोग करके या घुंघराले ब्रेसिज़ में समूहित एकाधिक आदेशों को पसंद नहीं करता है (जो आपके पास कमांड में आवश्यक नहीं हैं)। इस प्रयास करें:

COMPILE_FILES=$(sed -n -E '/<script type="text\/javascript"/ s%^.*src="\{\$baseUrl\}/([^"]+)".*$%\1%p' templates/common/minifiedScripts.tpl) 

आप एक sed स्क्रिप्ट कि कई आदेशों के होते है, तो आप -e का उपयोग कर उन्हें तोड़ने की नहीं होगी:

sed -n -E -e '/match/ {' -e 's/foo/bar/' -e 's/baz/qux/' -e 'p' -e '}' 
+0

ने ऐसा किया! धन्यवाद। – pocketfullofcheese

0

-r विस्तारित नियमित अभिव्यक्ति सेट का उपयोग करता है, और आप ओएसएक्स संस्करण द्वारा समर्थित नहीं हैं। MacPorts या Fink आज़माएं - उनके पास gnu sed के बंदरगाह हैं। या आप सीधे स्रोत डाउनलोड और संकलित कर सकते हैं।