2012-07-03 9 views
5

का उपयोग करते समय मैं एक सिंगल कोट्स को स्ट्रिंग में दो सिंगल कोट्स के साथ बदलना चाहता हूं। लेकिन जब स्ट्रिंग में & sed कमांड उसके बाद आने वाले सिंगल कोट्स को प्रतिस्थापित नहीं कर रहा है। कृपया इस पर कुछ विचार साझा करें।कैसे बचें और sed

उत्तर

13

आप इनपुट में कुछ भी भागने की जरूरत नहीं:

$ echo "123 ' foo & b'ar" | sed "s/'/''/g" 
123 '' foo & b''ar 

हालांकि, s आदेश & की 'प्रतिस्थापन' भाग में एक विशेष अर्थ नहीं है: यह मैच 'का अर्थ है।

$ echo "123 ' foo & b'ar" | sed "s/'/&&/g" 
123 '' foo & b''ar 

एस्केप यह एक \ साथ सब कुछ, भाग निकले जा करने के लिए यदि आवश्यक हो तो जरूरत है कि जैसे: यही कारण है कि उपरोक्त आदेश के रूप में फिर से लिखा जा सकता है

$ echo "123 ' foo & b'ar" | sed "s/'/'\&'/g" 
123 '&' foo & b'&'ar 
5

अगर आप पोस्ट जवाब देने के लिए आसान है आपका कोड, लेकिन मुझे लगता है कि आप एम्पर्सेंड से बच नहीं रहे हैं। यदि आप एक शाब्दिक एम्परसैंड चाहते हैं तो & से \& बदलें।

यदि आप उत्सुक हैं, तो अधिक विस्तृत स्पष्टीकरण के लिए The sed FAQ के अनुभाग 3.1.2 देखें।

+1

के लिए काम कर रहा है अरे, मैं के साथ एक स्ट्रिंग को बदलना चाहते 'और' मेरी उत्पादन स्ट्रिंग में। मैंने वेब पर विभिन्न उत्तरों के आधार पर '" और "', '\ &', '\\ &', '\\\ &', '" '\ &' "कोशिश की है लेकिन कुछ भी काम नहीं करता है, कोई सुझाव? – Ava

+1

'\ &' मेरे लिए काम करता है। उदाहरण के लिए, मैं 'sed' s/amp/\ &/g "' का उपयोग करके 'amp' के सभी उदाहरणों को '&' के साथ प्रतिस्थापित कर सकता हूं। यदि आपको अभी भी समस्याएं आ रही हैं, तो आपको अपनी इनपुट स्ट्रिंग और कोड के साथ एक नया प्रश्न पोस्ट करना चाहिए। –

+1

हाँ यह करता है। मैं एक और फाइल का उपयोग कर रहा था जिसमें परिवर्तन नहीं था :( – Ava

0

यह मेरे

bash>echo "'This is a string with 'single quote' & '&'" | sed "s/'/''/g" 
''This is a string with ''single quote'' & ''&''