टेक्स्ट को सेड के साथ रखें और मूल टेक्स्ट का हिस्सा रखें


20

मैं बदलने की कोशिश कर रहा हूं

<id>1</id>
<Name>ENTERPRISE RESOURCE PLANNING</Name>

सेवा:

<column name="id">1</column>
<column name="Name">ENTERPRISE RESOURCE PLANNING</column>

मुझे लगता है कि नौकरी के लिए सबसे अच्छा उपकरण होगा sed, हालांकि मैं यह पता नहीं लगा सकता कि मूल पाठ के हिस्सों को प्रतिस्थापित भाग में कैसे रखा जाए।

यदि मैं करता हूँ:

$ sed -i 's/<.*>.*<.*>/<column name="\\1">\\2<\/column>/g' filename.xml

आउटपुट है:

<column name="\1">\2</column>
<column name="\1">\2</column>

या भीतर से ऐसा ही कर रहा है vi, यह आउटपुट:

<column name=""></column>
<column name=""></column>

मैं इसे कैसे इतना है कि कर सकते हैं \1और \2उनके मूल मानों पर वापस प्रतिस्थापित कर रहे हैं?

जवाबों:


21

आप समूहों का उपयोग कर सकते हैं, जैसे:

$ sed -i 's/<\(.*\)>\(.*\)<.*>/<column name="\1">\2<\/column>/g' filename.xml

आरईएस के बारे में संभवतः सबसे भ्रामक हिस्सा यह है कि विभिन्न वाक्यात्मक स्वाद हैं।

उदाहरण के लिए, सेड और विम बेसिक रेग्युलर एक्सप्रेशंस का उपयोग करते हैं जहाँ आपको ()उनका मेटा-अर्थ प्राप्त करने के लिए उद्धरण देना होता है।

साथ विस्तारित नियमित अभिव्यक्ति (उदाहरण के लिए awk, egrep और कम) आप उद्धृत करने के लिए है ()शाब्दिक अर्थ मिलता है। अन्य मेटा-वर्णों के लिए समान अंतर हैं।

BRE ()शब्दार्थ के पीछे तर्क यह है कि जब आपका अधिकांश इनपुट C-Code है तो मेटा-उपयोग के लिए कोष्ठक का उद्धरण देना अधिक व्यावहारिक है।


यह वास्तव में मेरी कोशिश की गई पहली चीज़ थी, लेकिन मैं (और )पात्रों से बच नहीं पाया । मूर्खतापूर्ण प्रश्न, लेकिन ऐसा क्यों जरूरी है?
माइक

1
@ माय, अच्छा सवाल - जवाब अपडेट किया।
19
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.