2013-01-03 6 views
22

मैं कुछ इनपुट को स्वच्छ करना चाहता हूं और स्वीकार्य इनपुट के साथ कई वर्णों को प्रतिस्थापित करना चाहता हूं, उदा। एक डेनिश 'å' aa 'के साथ।एक बयान में एकाधिक प्रतिस्थापन के लिए sed में नियमित अभिव्यक्ति

यह कई कथनों का उपयोग करके आसानी से किया जाता है, उदाहरण के लिए /æ/ae/, /å/aa/, /ø/oe/, लेकिन टूल सीमाओं के कारण, मैं इसे एक नियमित अभिव्यक्ति में करने में सक्षम होना चाहता हूं।

मैं प्रासंगिक मामलों के सभी (/[(æ)(ø)(å)(Æ)(Ø)(Å)]/) पकड़ कर सकते हैं, लेकिन मैं प्रतिस्थापन मैं इसे करना चाहते हैं के रूप में (लेकिन शायद पूरी तरह से के रूप में इरादा) काम नहीं करता:

$ temp="RødgrØd med flæsk" 

$ echo $temp 
RødgrØd med flæsk 

$ echo $temp | sed 's/[(æ)(ø)(å)(Æ)(Ø)(Å)]/(ae)(oe)(aa)(Ae)(Oe)(Aa)/g' 
R(ae)(oe)(aa)(Ae)(Oe)(Aa)dgr(ae)(oe)(aa)(Ae)(Oe)(Aa)d med fl(ae)(oe)(aa)(Ae)(Oe)(Aa)sk 

(पहले गूंज लाइन को दिखाने के लिए यह जरूरी है कि है एक एन्कोडिंग समस्या नहीं है)

बस एक तरफ के रूप में, टूल समस्या यह है कि मुझे Sublime Text 2 snippet में एक ही रेगेक्स का उपयोग करना चाहिए।

कोई भी यह समझने में सक्षम है कि मेरे रेगेक्स स्टेटमेंट में क्या गलत है?

अग्रिम धन्यवाद।

उत्तर

38

यह विभाजन कई sed बयान, ; द्वारा अलग में:

sed 's/æ/ae/g;s/ø/oe/g;s/å/aa/g;s/Æ/Ae/g;s/Ø/Oe/g;s/Å/Aa/g' 
+0

ब्लाग, ज़ाहिर है। मुझे सब्लिमे टेक्स्ट स्निपेट उपयोग पर ज़ोर देना चाहिए था, लेकिन यह मुख्य प्रश्न का बिल्कुल सही जवाब है। – Jan

+1

@ जेन, धन्यवाद। मुझे नहीं लगता कि आप एक एकल रेगेक्स लिख सकते हैं जो कई संभावित मैचों में से एक को कई प्रतिस्थापनों में से एक के साथ बदल देता है, खासकर 'sed' के साथ नहीं। –

6

साथ

sed -e 's/Find/Replace/g;s/Find/Replace/g;[....];/Find/Replace/g' 

आप चाल कर देंगे।

तो, में अनुवाद आपको क्या चाहिए

sed -e 's/æ/ae/g;s/ø/oe/g;s/å/aa/g;s/Æ/Ae/g;s/Ø/Oe/g;s/Å/Aa/g' 
+0

बेशक, ब्लाग। मुझे सब्लिमे टेक्स्ट स्निपेट उपयोग पर ज़ोर देना चाहिए था, लेकिन यह मुख्य प्रश्न का बिल्कुल सही जवाब है। – Jan

3

यह (जीएनयू sed) आप के लिए काम कर सकते हैं:

sed -r 's/$/\næaeøoeåaaÆAeØOeÅAa/;:a;s/([æøåÆØÅ])(.*\n.*\1(..))/\3\2/;ta;s/\n.*//' file 

यह पंक्ति के अंत में एक लुकअप तालिका जोड़ने पाशन से काम करता है जब तक कि सभी कुंजियों को प्रतिस्थापित नहीं किया जाता है तब तक लुकअप तालिका हटा दी जाती है।

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