मैं मावेन के लिए एक रंगीन स्क्रिप्ट के मूल के रूप में कई प्रतिस्थापन कमांड चलाता हूं । में से एक sed
आदेशों के लिए रेगुलर एक्सप्रेशन जो खोल में खोज काम करता है के रूप में उपयोग करता है यहाँ पर चर्चा की । वर्तमान (काम नहीं) कार्यान्वयन यहाँ पाया जा सकता है ।
जब मैं स्क्रिप्ट में कमांड के विभिन्न रूपों में से एक को शामिल करता हूं तो अलग व्यवहार होता है:
वेरिएंट 1:
$ sed -re "s/([a-zA-Z0-9./\\ :-]+)/\1/g"
स्क्रिप्ट के अनुकूल:
-re "s/WARNING: ([a-zA-Z0-9./\\ :-]+)/${warn}WARNING: \1${c_end}/g" \
त्रुटि: शेल उसी सूचना को आउटपुट करता है जैसे कि मैं टाइप करूंगा $ sed
। अजीब!?
वेरिएंट 2:
$ sed -e "s/\([a-zA-Z0-9./\\ :-]\+\)/\1/g"
स्क्रिप्ट के अनुकूल:
-e "s/WARNING: \([a-zA-Z0-9./\\ :-]\+\)/${warn}WARNING: \1${c_end}/g" \
त्रुटि:
sed: -e अभिव्यक्ति # 7, char 59: 's' कमांड के RHS पर अमान्य संदर्भ \ 1
'
और डबल कोट्स "
को थोड़ा अलग माना जाता है, खासकर जब व्याख्या करते हुए $vars
। उदाहरण के लिए: sudo sh -c "sed -r -i 's/(^.+_supplicant.conf)/\1${MTXT}/' /etc/network/interfaces"
काम करता है, लेकिन: sudo sh -c 'sed -r -i "s/(^.+_supplicant.conf)/\1${MTXT}/" /etc/network/interfaces'
नहीं करता है।
-i
(स्थान विकल्प में संपादित करें) के साथ संयुक्त किया था-re
, जिसके परिणामस्वरूप-ire
(ताकि इसके तर्क के रूप-i
मेंre
टुकड़े का उपभोग हो रहा थाSUFFIX
और इसलिए विस्तारित रेगेक्स मोड सक्षम नहीं हो रहा था); इसे-i -re
मुद्दे को तय करने के लिए बदल रहा है ।