/ / बैश स्क्रिप्ट (मैकओएस) में स्ट्रिंग बदलें - मैकोस, बैश, सेड

स्ट्रिंग को बैश स्क्रिप्ट (मैकोज़) में बदलें - मैकोस, बैश, sed

मेरे पास मेकफाइल में निम्न कोड उत्पन्न है:

    ${SED} -i "" -e "s|(DESTDIR)|${DESTDIR}|g" $(pcfiles)
#   ${SED} -i "s|(DESTDIR)|${DESTDIR}|g" $(pcfiles)

जिसे मैं बदलना चाहता हूं

#   ${SED} -i "" -e "s|(DESTDIR)|${DESTDIR}|g" $(pcfiles)
${SED} -i "s|(DESTDIR)|${DESTDIR}|g" $(pcfiles)

तो यह बस एक लाइन टिप्पणी करने की बात है, और दूसरे के साथ की जगह।

लेकिन सिंगल कोट्स और डबल कोट्स के कारण मैं इसे हासिल नहीं कर सकता।

यदि कुछ रेगेक्स विशेषज्ञ मुझे मदद करने के लिए 1-2 मिनट लेने के लिए तैयार हैं वह बहुत अच्छा होगा।

मैं अपने बालों को यहाँ खींच रहा हूँ।

धन्यवाद

उत्तर:

उत्तर № 1 के लिए 1
# Comment out 1st line.
sed -E "s`([[:space:]]*${SED} -i """""" -e "s|(DESTDIR)|${DESTDIR}|g" $(pcfiles))`#1`" Makefile
# Uncomment 2nd line.
sed -E "s`#([[:space:]]+${SED} -i "s|(DESTDIR)|${DESTDIR}|g" $(pcfiles))`1`" Makefile

The sed आदेश एकल उद्धृत तारों में हैं, जो आम तौर पर उपयोग करने में आसान होते हैं (आपको अपनी स्ट्रिंग का विस्तार करने वाले खोल के बारे में चिंता करने की आवश्यकता नहीं है)।

पहले आदेश का मुश्किल पहलू यह है कि एकल उद्धरण एक उद्धृत स्ट्रिंग में शामिल नहीं किया जा सकता है (यहां तक कि बचने के लिए एक विकल्प नहीं है), तो कमान बस के साथ दो एकल उद्धृत तार में टूट गया है """" - राशि "" - में कटा हुआ।

अन्य मुश्किल पहलू सभी विशेष रेगेक्स चार के भागने के लिए है।सही.