我有这个xml文件:
<xml>
<segmentrecorddb>
...
</segmentrecorddb>
</xml>
我想写一个sh文件,它将添加一个内部xml节点
意味着文件将是:
<xml>
<segmentrecorddb>
<myNoed>
</myNoed>
...
</segmentrecorddb>
</xml>
如何删除前两行
添加2行并添加
EDIT1:
我试过了:
➜ Downloads sed "s/<xml><segmentrecorddb>/<xml><segmentrecorddb><myNode></myNode>/" menyHtml.html > menyHtml.html
得到了:
sed: 1: "s/<xml><segmentrecorddb ...": bad flag in substitute command: 'm'
EDIT2:
<xml>
<segmentrecorddb>
...
</segmentrecorddb>
</xml>
我跑了
sed 's/<segmentrecorddb>/<segmentrecorddb>\n<myNode><\/myNode>/' < menyHtml.html > menyHtml1.html
输入
得到了输出:
<xml>
<segmentrecorddb>n<myNode></myNode>
...
</segmentrecorddb>
</xml>
我该如何解决这个问题?
答案 0 :(得分:1)
Shell脚本是强有力地操纵XML的不良选择,因为UNIX可用的字符串处理实用程序往往是面向行的,而XML不是面向行的。
如果您生成的解决方案隐含地依赖于换行符存在的位置,例如,当有人更改输入XML的规范化方式时,您会发现解决方案可能会中断。
您可能还需要担心是否要更改 <segmentrecorddb>
的每个实例或仅更改一个。
有些工具可以提供帮助,例如xml2和pyxie。但是,如果您需要安装其他东西,为什么不安装能够正确处理XML的东西(例如Python)?
也就是说,以下sed命令将以最简单的方式执行修复:
sed 's/<segmentrecorddb>/<segmentrecorddb>\n<myNode><\/myNode>/' < input.xml > output.xml