目标文件和源文件都是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>