我有一些台词,比如:

<channel update="i" site="merge-xmltv" site_id="" xmltv_id="Rai 1">Rai 1</channel>
<channel update="i" site="merge-xmltv" site_id="" xmltv_id="Rai 1 +2HD">Rai 1 +2HD</channel>
<channel update="i" site="merge-xmltv" site_id="" xmltv_id="Rai 1 +1HD">Rai 1 +1HD</channel>

我需要将xmltv_id的值复制到site_id中,如下所示:
<channel update="i" site="merge-xmltv" site_id="Rai 1" xmltv_id="Rai 1">Rai 1</channel>
<channel update="i" site="merge-xmltv" site_id="Rai 1 +2HD" xmltv_id="Rai 1 +2HD">Rai 1 +2HD</channel>
<channel update="i" site="merge-xmltv" site_id="Rai 1 +1HD" xmltv_id="Rai 1 +1HD">Rai 1 +1HD</channel>

我本来想用SED,但现在有麻烦了。
谢谢有人想帮我!

最佳答案

正如Ruslan Osmanov指出的那样,这类工作的工具是xmlstarlet。最明显的解决方案是:

xmlstarlet ed -u "//channel/@site_id" -x "../@xmltv_id" input

但是,在我的xmlstarlet版本中,这似乎不起作用。但是,您可以解决该问题:
xmlstarlet ed -u "//channel/@site_id" -x "string(../@xmltv_id)" input

10-01 15:51