使用 SED 合并 2 个 xml 标签

使用 SED 合并 2 个 xml 标签

我为电视节目表创建了一个 xmltv.xml,需要使用 SED 进行一些后期处理。我使用的是 Windows 10,通过 bat 文件运行 Windows 版 SED。问题是我的前端只显示某些标签,所以我需要在 xml 中将副标题与描述结合起来。我有一个当前的 SED 命令,我运行该命令将副标题附加到标题,但无法找出副标题到描述。

这是 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 将曲棍球队从副标题附加到标题的方法

命令

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

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

答案1

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 解决方案,但我认为它很容易适应 Windows。您可以尝试在替换中使用另一个分隔符,并使用高级正则表达式的 -r 选项来避免\/ \( \)。我写了一些文字标签(</sub-title> </desc>),所以如果有一些额外的空格,你就必须适应。

相关内容