2011-11-03 13 views
27

निम्नलिखित उम्मीद के अनुसार काम कर रहा है।एकल उद्धरण से बचें

test \' this 

यह दोहरे उद्धरण चिह्नों से बचने के लिए एक ही आदेश में रूप में अच्छी तरह संभव है: मैं \ 'के साथ

echo "test ' this" | sed 's/'"'"'/me/g' 
test me this 

अपेक्षित परिणाम शब्द "मुझे" बदलना चाहते हैं?

उत्तर

45

आपका प्रश्न थोड़ा उलझन में है क्योंकि प्रतिस्थापित करने के लिए मूल स्ट्रिंग में me नहीं है। हालांकि, मुझे लगता है कि मेरे पास है। मुझे व्याख्या करते हैं:

मैं एक sed आदेश जो सफलतापूर्वक शब्द me के साथ एक एकल उद्धरण ' की जगह ले सकता है। मैं एक ऐसा ही चाहता हूं जो इसे वर्ण अनुक्रम \' के साथ प्रतिस्थापित कर सके।

अगर ऐसी बात (तुम सिर्फ एकल उद्धरण से बचने के लिए चाहते हैं) है, तो आप उपयोग कर सकते हैं:

pax$ echo "test ' this" | sed "s/'/\\\'/g" 
test \' this 

sed आदेश को दोहरे उद्धरण चिह्नों का उपयोग करके आप एम्बेडेड एकल उद्धरण बारे में चिंता करने की आवश्यकता को दूर । आप तो यह है कि sed देखेंगे तब से बचने के बारे में चिंता के बाद से खोल पलायन में से एक स्तर को अवशोषित करेंगे की क्या ज़रूरत है :

s/'/\'/g 

जो \' में ' में परिवर्तित कर देंगे के रूप में वांछित।

आप एक ही sed के साथ दोनों एकल और दोहरे उद्धरण चिह्नों से बचने के लिए एक तरह से चाहते हैं, यह शायद सबसे आसान sed करने के लिए कई आदेशों प्रदान करने के लिए है, तो आप वैकल्पिक उद्धरण चिह्नों का उपयोग कर सकते हैं:

pax$ echo "Single '" 'and double "' 
Single ' and double " 

pax$ echo "Single '" 'and double "' | sed -e "s/'/\\\'/g" -e 's/"/\\"/g' 
Single \' and double \" 

तो मैं आपने अपनी आवश्यकताओं को गलत समझा है, कुछ उदाहरण मदद कर सकते हैं।

+0

मुझे लगता है कि उनका मतलब उनके पहले रूपांतरण के लिए बाद में प्रतिस्थापन था। '[डोड @ एमबीपी -13 ~] गूंज" मुझे यह परीक्षण करें "| sed "s/me/\\\ '/" ' ' test \ 'this' –

+0

@ डॉन, वास्तव में मुझे लगता है कि यह समझ में आता है। ओपी जानता है कि 'मुझे' पाने के लिए इसे कैसे किया जाए, अब वे इसे '\' '(और डबल कोट्स के लिए भी) प्राप्त करने के लिए करना चाहते हैं। अपडेट करने के लिए (उम्मीद है) उत्तर दिया। – paxdiablo

+0

उल्लेख करने के लिए धन्यवाद कि आप बाहरी सिंगल कोट्स को डबल कोट्स में बदल सकते हैं, मेरे लिए बहुत अच्छा काम किया:) –

6

इस तुम क्या मतलब है ?:

# cat <<! | sed 's/["'"'"']/\\&/g' 
> quote ' 
> double quotes " 
> quote ' double quotes " 
> ! 
quote \' 
double quotes \" 
quote \' double quotes \" 

या यह है:

# echo "test me test"|sed 's/me/\\'"'"'/g' 
test \' test 
# echo "test me test"|sed 's/me/\\"/g' 
test \" test 

मैं यह सबसे अच्छा हमेशा एकल उद्धरण sed के लिए मिल/awk/perl ... कमांड लाइन पर आदेश और उनके भीतर उपयोग किए गए डबल कोट पैरामीटर के लिए "छेद" बनाएं।

9

मुझे आपके प्रश्न के बारे में कुछ संदेह हैं, लेकिन फिर भी मेरा समाधान किसी के लिए उपयोगी है।

आइए मुझे सब से पहले कहते हैं:

\\ कि मतलब है एक \ क्योंकि जब आप दो डाल एक साथ आप metacharacter के रूप में इसका अर्थ रद्द कर रहे हैं। और \ x27 एकल उद्धरण के रूप में, कम से कम मेरे लिए एक डबल के साथ काम करने से आसान है ...

अंत में मैं

echo "test me this" | sed 's/me/\\\x27/g' 

इसलिए यहाँ डाल तुम मुझे परीक्षण ==> परीक्षण \ 'इस

echo "test \' this" | sed 's/\\\x27/me/g' 

और यहाँ विपरीत है।

+0

मैं इसे अपने आप से कभी नहीं समझूंगा। आपका बहुत बहुत धन्यवाद! –

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