SED के साथ 2 xml टैग मिलाएं


0

मैं टीवी लिस्टिंग के लिए एक xmltv.xml बनाता हूं और कुछ पोस्ट प्रोसेसिंग के लिए SED का उपयोग करने की आवश्यकता होती है। Im एक बल्लेबाजी फ़ाइल के माध्यम से Windows चलाने के लिए SED के साथ विंडोज 10 का उपयोग कर रहा है। परेशानी केवल कुछ टैग्स हैं जो मेरे सामने के छोर पर दिखाए जाते हैं इसलिए मुझे xml में desc के साथ सब-टाइटल को संयोजित करने की आवश्यकता है। मेरे पास एक वर्तमान SED कमांड है जो मैं शीर्षक को उप-शीर्षक को जोड़ने के लिए चलाता हूं, लेकिन उप-शीर्षक को desc में नहीं निकाल सकता।

यह वही है जो xml में एक चैनल की तरह दिखता है, लेकिन सभी कार्यक्रमों में एक उप-शीर्षक नहीं है।

  <programme start="20160422223500 -0500" stop="20160422233700 -0500" channel="Channel_ID">
<title lang="en">Program Name</title>
<sub-title lang="en">Subtitle Example</sub-title>
<desc lang="en">Description Example</desc>

इस तरह से मैं एक हॉकी टीम को उप-शीर्षक से sed.txt का उपयोग करके शीर्षक में जोड़ दूंगा

cmd

sed.exe -f sed.txt <"xmltv.xml"> "xmltv2.xml"

sed.txt

:a;N;$!ba;s/\(<programme[^<]*\)\(<t[^>]*>\)\(NHL Hockey*[^<]*\)\(<[^<]*\)\(<sub-title[^>]*>\)\([^<]*\)[^<\/programme]*/\1\2\3: \6\4\5\6/g

क्या कोई कृपया उप-शीर्षक को इस तरह से नीचे उतरने के लिए ऊपर जैसा आदेश प्रदान कर सकता है?

<desc lang="en">Subtitle Example : Description Example</desc>

जवाबों:


0
sed -nr '/sub-title/ {N;s,/desc,&,;Tprint;s,<sub-title[^>]+>(.*)</sub-title>\n(<desc[^>]+>)(.*</desc>),\2\1 : \3,;:print};p' <<<'<programme start="500 -05" stop="700 -5" channel="Channel_ID">
<title lang="en">Program Name</title>
<sub-title lang="en">Subtitle Example</sub-title>
<desc lang="en">Description Example</desc>

<programme start="600 -05" stop="800 -5" channel="Channel_ID">
<title lang="en">Program Name foo</title>
<desc lang="en">Description Example bar</desc>
> '
<programme start="500 -05" stop="700 -5" channel="Channel_ID">
<title lang="en">Program Name</title>
<desc lang="en">Subtitle Example : Description Example</desc>

<programme start="600 -05" stop="800 -5" channel="Channel_ID">
<title lang="en">Program Name foo</title>
<desc lang="en">Description Example bar</desc>

यह एक GNU / Linux sed समाधान है, लेकिन मुझे लगता है कि विंडोज के लिए अनुकूल होना आसान है। आप बचने के लिए उन्नत Regexp के लिए प्रतिस्थापन और -r विकल्प में एक और विभाजक का उपयोग करने का प्रयास कर सकते हैं \/ \( \)। मैंने कुछ शाब्दिक टैग ( </sub-title> </desc>) लिखे ताकि यदि कुछ अतिरिक्त रिक्तियाँ हों तो आपको अनुकूलित करना होगा।

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