MacOS

2012-09-04 13 views
7

पर sed "अपरिभाषित लेबल" मैं हाल ही में पता चला कि लिनक्स पर या Cygwin के तहत इस सरल sed अभिव्यक्ति काम ठीक लेकिन एक "अपरिभाषित लेबल" त्रुटि के साथ मैक पर विफल रहता है:MacOS

$ sed '/SUCCESSFUL/d ; /\[java\]/!b label; s/\s\+\[java\]//; /^\s*$$/d; /Compiling/!d; :label /^\s*$$/d; s/^/monitor: /' 
sed: 1: "/SUCCESSFUL/d ; /\[java ...": undefined label 'label; s/\s\+\[java\]//; /^\s*$$/d; /Compiling/!d; :label /^\s*$$/d; s/^/monitor: /' 

MacOS पर sed एक है जीएनयू समकक्ष की तुलना में विभिन्न विकल्पों के साथ बीएसडी संस्करण। हालांकि man sed स्पष्ट रूप से इंगित करता है कि sed के मैकोज़ संस्करण लेबल का समर्थन करता है, तो यह त्रुटि क्यों है, और इसे हल करने के लिए सबसे महत्वपूर्ण क्यों है?

उत्तर

3

लेबल का नाम, पहली शाब्दिक न्यू लाइन के साथ समाप्त हो जाता है सेमी-कोलन में नहीं। समस्या को हल करने के दो आसान तरीके हैं। शाब्दिक नई पंक्तियां जोड़ें:

sed '/SUCCESSFUL/d 
    /\[java\]/!b label 
    s/\s\+\[java\]// 
    /^\s*$$/d; /Compiling/!d 
    :label 
    /^\s*$$/d 
    s/^/monitor: /' 

या उपयोग कई -e विकल्प:

sed -e '/SUCCESSFUL/d ; /\[java\]/!b label' \ 
    -e 's/\s\+\[java\]//; /^\s*$$/d; /Compiling/!d' \ 
    -e':label' -e'/^\s*$$/d; s/^/monitor: /' 
2

SO पर समान प्रश्नों का एक समूह है लेकिन उनमें से अधिकतर प्लेटफार्मों के बीच -i भिन्नता के व्यवहार के कारण हैं, इसलिए यह अलग है।

इस मामले में, समस्या सरल है: ऐसा लगता है कि लेबल संदर्भ केवल sed के बीएसडी संस्करण में पीछे जा सकते हैं, जबकि जीएनयू संस्करण आगे संदर्भों का उपयोग करने की अनुमति देता है। यह मैकोज़ पर है, :labelb label से पहले दिखाई देना चाहिए।

समाधान या तो शाखा से पहले लेबल को परिभाषित करने के लिए अभिव्यक्ति को फिर से लिखना है, या उपर्युक्त अभिव्यक्ति के मामले में शाखा का एक प्रकार है "यदि यह पैटर्न मौजूद नहीं है ... आगे बढ़ें"। इस मामले में अभिव्यक्ति पहली जगह में लेबल की जरूरत नहीं करने के लिए विस्तारित किया जा सकता:

sed '/SUCCESSFUL/d ; /\s+\[java\]\s*/d; /\[java\]/s/\s\+\[java\]//; /Compiling/!d; /^\s*$$/d; s/^/monitor: /' 
+0

+1 और अच्छा पकड़। यह इस मुद्दे को इंडेंट कोड के रूप में देखने में मदद करता है, बजाय एक-लाइनर-इटिस :-) शुभकामनाएं। – shellter

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