如何将一个文件插入另一个文件的标记位置



目标文件和源文件都是xml类型的文件。

我很难使用sed,因为它不能很好地处理特殊字符,而那些xml中充满了特殊字符。

我研究了有一种方法可以用awk来做,这是我的问题,因为我很难使用awk

编辑:

主xml文件,标记位置:

<?xml version="1.0" encoding="utf-8"?>
<ip>
<?processing instructions?>
<lista>
<!--> EKOLOGIA +5 <-->
<kategoria nazwa="EKO" thumb="/home/xvision/ip/swf/EKO/eko.png">
</kategoria>
<!-- KONIEC PAKIETU <-->
<!--temp-->
</lista>
</ip>

要包含在主文件(第二个xml)中的文件:

<!--> PAKIET FUN 50 GIER <-->
<kategoria nazwa="EDU" thumb="/home/xvision/ip/swf/EDU/edu.png">
</kategoria>

最终文件:

<?xml version="1.0" encoding="utf-8"?>
<ip>
<?processing instructions?>
<lista>
<!--> EKOLOGIA +5 <-->
<kategoria nazwa="EKO" thumb="/home/xvision/ip/swf/EKO/eko.png">
</kategoria>
<!-- KONIEC PAKIETU <-->
<!--> PAKIET FUN 50 GIER <-->
<kategoria nazwa="EDU" thumb="/home/xvision/ip/swf/EDU/edu.png">
</kategoria>
</lista>
</ip>

应该能行

$ sed -i -e '/<!--temp-->/{r file.insert' -e 'd}' file.main

在标记处插入文件并删除标记行,替换修改主文件。

-e选项定义了一个脚本,我们可以多次使用,这里它用于两个单独的操作两次,匹配行插入文件,第二个块删除(匹配的)行。注意单引号,它是脚本的边界。

如果没有人可以使用xml感知工具为您提供解决方案,那么您可能只需要以下内容:

$ awk '
NR==FNR { lines = (NR>1 ? lines ORS : "") $0; next }
$0 == "<!--temp-->" { $0 = lines }
{ print }
' second.xml main.xml
<?xml version="1.0" encoding="utf-8"?>
<ip>
<?processing instructions?>
<lista>
<!--> EKOLOGIA +5 <-->
<kategoria nazwa="EKO" thumb="/home/xvision/ip/swf/EKO/eko.png">
</kategoria>
<!-- KONIEC PAKIETU <-->
<!--> PAKIET FUN 50 GIER <-->
<kategoria nazwa="EDU" thumb="/home/xvision/ip/swf/EDU/edu.png">
</kategoria>
</lista>
</ip>

相关内容

  • 没有找到相关文章

最新更新