bash - Sed में एक ही बोली का मिलान कैसे करें




shell escaping (2)

आप या तो उपयोग कर सकते हैं:

"texta'textb" (APOSTROPHE inside QUOTATION MARKs)

या

'texta'\''textb' (APOSTROPHE text APOSTROPHE, then REVERSE SOLIDUS, APOSTROPHE, then APOSTROPHE more text APOSTROPHE)

मैंने यूनिकोड के चरित्र नामों का इस्तेमाल किया। रिवर्स सॉल्गस को सामान्यतः बैकस्लैश के रूप में जाना जाता है

उत्तरार्द्ध मामले में, आप अपने एपोस्ट्रोफ़ को बंद कर देते हैं, फिर एक बैकस्लैश के साथ अपने एपोस्ट्रो को शेल-उद्धरण दें, फिर बाकी पाठ के लिए अन्य एपॉस्ट्रॉफी खोलें।

Sed में एकल बोली से मेल कैसे करें यदि अभिव्यक्ति एकल उद्धरणों में संलग्न होती है:

sed -e '...'

उदाहरण के लिए इस पाठ को मिलान करने की आवश्यकता है:

'foo'

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

पिछले उत्तर को स्पष्ट करने के लिए, आपको एक बैकस्लैश के साथ उद्धरण से बचने की आवश्यकता है, लेकिन आप इसे एक एकल उद्धृत अभिव्यक्ति के भीतर नहीं कर सकते बाश मैन पेज से:

एकल कोट्स में वर्णों को सम्मिलित करना उद्धरण चिह्नों के भीतर प्रत्येक वर्ण के शाब्दिक मूल्य को संरक्षित करता है। एकल उद्धरण एक एकल उद्धरण चिह्नों के बीच नहीं हो सकता है, यहां तक ​​कि बैकस्लैश के बाद भी।

इसलिए, उद्धृत अभिव्यक्ति को समाप्त करने की आवश्यकता है, बच गए उद्धरण डालें, और एक नया उद्धृत अभिव्यक्ति प्रारंभ करें शेल का उद्धरण हटाने कोई भी अतिरिक्त स्थान नहीं जोड़ता है, इसलिए आपको स्ट्रिंग संयोजन मिल जाएगा।

इसलिए, मूल प्रश्न का उत्तर देने के लिए कि कैसे एकल अभिव्यक्ति 'फू' को उद्धृत करें, आप ऐसा कुछ करेंगे:

sed -e '...'\''foo'\''...'

(जहां '...' शेष अभिव्यक्ति है)।

कुल मिलाकर, पठनीयता के लिए, यदि आप संभवतः दोहरे उद्धरण चिह्नों के आसपास के उद्धरण बदलते हैं तो आप बेहतर होंगे:

sed -e "...'foo'..."

[पहले (एकल उद्धरण) दृष्टिकोण की संभावित रखरखाव दुःस्वप्न का एक उदाहरण के रूप में, ध्यान दें कि कोट्स, बैकस्लाब्स और अन्य टेक्स्ट रंगों पर स्ट्रैक ओवरफ्लो के वाक्यविन्यास हाइलाइट कैसे करते हैं - यह निश्चित रूप से सही नहीं है।]





escaping