2008-09-18 12 views
30

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

'foo' 
+0

टैग [sed] कम या ज्यादा सही नहीं है के बाद से सवाल जैसे के बारे में हो सकता है - (एकल उद्धरण) दृष्टिकोण, ध्यान दें कैसे StackOverflow की वाक्य रचना रंग पर प्रकाश डाला उद्धरण, बैकस्लैश और अन्य पाठ। सामग्री में किसी भी बदलाव के बिना अजीब। यह 'खोल' होना चाहिए, लेकिन मैं पीछे हटना नहीं कर सकता। – tzot

+1

@TimB: खोल-उद्धरण एक बिल्कुल नया टैग है, और "खोल" के बाद अनावश्यक, "भागने" पर्याप्त से अधिक हैं। "एस्केपिंग" का इस्तेमाल दशकों (40 साल के करीब) के लिए किया जाता है जब कोई शैल में अपने विशेष अर्थ से वर्णों को स्ट्रिप करता है ... और सवाल उद्धरण से बचने के बारे में था। – tzot

उत्तर

43
:

sed -e '...' 

उदाहरण के लिए इस पाठ से मेल खानी चाहिए

आप या तो उपयोग:

"texta'textb" (APOSTROPHE inside QUOTATION MARKs) 

या

+०१२३५१६४१०६
'texta'\''textb' (APOSTROPHE text APOSTROPHE, then REVERSE SOLIDUS, APOSTROPHE, then APOSTROPHE more text APOSTROPHE) 

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

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

+6

दूसरा मामला वह है जिसे मैं ढूंढ रहा था। धन्यवाद। – grigy

34

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

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

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

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

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

(जहां '...' sed अभिव्यक्ति के बाकी है:

तो, अभिव्यक्ति 'foo' बोली सिंगल के मूल सवाल का जवाब देने के लिए, आप कुछ इस तरह करना होगा)।

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

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

[पहले की क्षमता रखरखाव दुःस्वप्न के एक उदाहरण के रूप , यह निश्चित रूप से सही नहीं है]

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

  • कोई संबंधित समस्या नहीं^_^