Combine 2 tags xml com SED

0

Eu crio um xmltv.xml para listagens de TV e preciso usar o SED para alguns pós-processamento. Estou usando o Windows 10 com SED para Windows executado através de um arquivo bat.  O problema é que apenas certas tags são mostradas no meu front end, então eu preciso combinar sub-título com desc no xml.  Eu tenho um comando SED atual que corro para anexar o subtítulo ao título, mas não consigo descobrir o subtítulo para desc.

Isto é o que um canal no xml parece, mas nem todos os programas têm um subtítulo.

  <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>

É assim que eu adicionaria um time de hockey do subtítulo ao título usando o 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]*/: /g

Alguém por favor pode fornecer um comando como acima para anexar o sub-título para desc assim?

<desc lang="en">Subtitle Example : Description Example</desc>
    
por halikus 21.04.2016 / 08:30

1 resposta

0

sed -nr '/sub-title/ {N;s,/desc,&,;Tprint;s,<sub-title[^>]+>(.*)</sub-title>\n(<desc[^>]+>)(.*</desc>), : ,;: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>

É uma solução sed GNU / Linux, mas acho que é fácil se adaptar ao Windows. Você pode tentar usar outro separador em substituição e a opção -r para Regexp avançado para evitar \/ \( \) . Escrevi algumas tags literais ( </sub-title> </desc> ), então, se houver alguns espaços em branco extras, você terá que se adaptar.

    
por 25.05.2016 / 19:04