ठीक है, यहाँ है कि मैं क्या के लिए आया था गया है।
सबसे पहले, मुझे ord() के साथ पता चला कि सिंगल और डबल कोट्स कैरेक्टर के लिए कोड क्या हैं, और उसके बाद $ (..) वाक्यविन्यास का इस्तेमाल बिना अज्ञात sed अभिव्यक्ति में किया जाता है। मैंने खाली तारों के बजाय एक्सएक्स और वाई का इस्तेमाल किया। जाहिर है यह इष्टतम से दूर है, यानी उन्हें शायद एक अभिव्यक्ति में जोड़ा जाना चाहिए, मैं आपको इसके साथ प्रयोग करने के लिए प्रोत्साहित करता हूं। समस्याओं को उद्धृत करने से बचने के लिए कई तकनीकें हैं, आप शैल द्वारा व्याख्या किए जाने से बचने के लिए, अलग अभिव्यक्ति में अलग अभिव्यक्ति भी डाल सकते हैं। आउटपुट में एकल अपठनीय अक्षरों से निपटने का प्रयास करते समय ord()/chr() चाल भी उपयोगी होती है, उदा। गैर-यूटीएफ कंसोल पर यूटीएफ तार।
dtpwmbp:~ pwadas$ echo '"' | perl -pe 'print ord($_) . "\n";'
34
"
dtpwmbp:~ pwadas$ echo "'" | perl -pe 'print ord($_) . "\n";'
39
'
dtpwmbp:~ pwadas$ echo \'\"
'"
dtpwmbp:~ pwadas$ echo \'\" | sed -e s/$(perl -e 'print chr(34) . "\n"')/XX/g | sed -e s/$(perl -e 'print chr(39) . "\n"')/yy/g
yyXX
dtpwmbp:~ pwadas$
संपादित करें (ध्यान दें कि इस समय, दोनों पात्रों को एक ही स्ट्रिंग "yy" के साथ बदल जाता है)। वहाँ यह करने के लिए संभव हो जाना चाहिए चरित्र कोड और विपरीत, यानी करने के लिए "अनुवाद" वर्ण के लिए कुछ खोल उपयोगिताओं हो सकता है पेर्ल या अन्य भाषा दुभाषिया का उपयोग किए बिना ऐसा करें।
dtpwmbp:~ pwadas$ echo \'\" | sed -e s/[`perl -e 'print chr(34) . chr(39)'`]/yy/g
yyyy
dtpwmbp:~ pwadas$
और यहाँ अभी तक खोल में एक और तरीका है, शायद और भी आसान
dtpwmbp:~ pwadas$ X="'"; Y='"' ; echo $X$Y; echo $X$Y | sed -e "s/$X/aa/g;s/$Y/bb/g"
'"
aabb
dtpwmbp:~ pwadas$
स्रोत
2013-08-16 10:55:03
@ user2689092 नोट इमेन का समाधान मध्यस्थ चरित्र के साथ sed अभिव्यक्ति संलग्नक को बदलने के साथ एक तकनीक का उपयोग करता है। आप बीबीबी के साथ प्रतिस्थापित करने के लिए, उदाहरण के लिए, sed -e का% aaa% bbb% g 'का उपयोग कर सकते हैं, मानते हैं कि मूल इनपुट में कोई "%" नहीं है। –