我有一个简单的xml文件,类似于:
<student>
</student>
我正在使用此sed命令:
sed -i "s/<\/student>/ <name>${1}<\/name>\
<age>${2}<\/age>\
<\/student>/g" pom.xml
使用以下命令用一些xml数据替换我的xml:
./ main.sh JohnDoe 12
,并根据命令行值将其打印为
<student>
<name>JohnDoe</name>
<age>12</age>
</student>
但是最终打印为
<student>
<name>JohnDoe</name> <age>12</age> </student>
所以我该如何使用sed整齐地格式化xml数据!
感谢您的提前帮助!
答案 0 :(得分:1)
sed -i "s/<\/student>/ <name>${1}<\/name>\n <age>${2}<\/age>\n<\/student>/g" pom.xml
请记住,不建议通过sed或awk解析xml,请在此处搜索parse xml bash
答案 1 :(得分:0)
解决这个问题几天后!我能够提出解决方案
#!/bin/bash
newLine=\\n
sed -i "s/<\/student>/ <name>${1}<\/name>${newLine}\
<age>${2}<\/age>${newLine}\
<\/student>/g" pom.xml
创建新行\n
变量并将其添加到每行的末尾即可。
答案 2 :(得分:-1)
XML是具有其语义的标记语言,不应使用sed
之类的工具对其进行解析/操作。使用适当的XML / HTML解析器/处理器。
使用xmlstarlet
工具:
示例test.xml
内容:
<student>
</student>
test.sh
脚本内容:
#!/bin/bash
xmlstarlet ed -s "student" -t elem -n name -v "$1" -s "student" \
-t elem -n age -v "$2" test.xml | xmlstarlet fo -o -
用法:
$ . test.sh John 35
输出:
<student>
<name>John</name>
<age>35</age>
</student>
文档链接:http://xmlstar.sourceforge.net/doc/UG/xmlstarlet-ug.html#idm47077139594320