使用 sed 替换文本并缩进数据
Replace text and indent the data using sed
我有一个简单的 xml 文件,有点像:
<student>
</student>
我正在使用这个 sed 命令:
sed -i "s/<\/student>/ <name><\/name>\
<age><\/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 数据!!
提前感谢您的帮助!!
XML是一种标记语言,它的语义不应该是parsed/manipulated和sed
这样的工具。使用合适的 XML/HTML parsers/processors.
使用xmlstarlet
工具:
样本test.xml
内容:
<student>
</student>
test.sh
脚本内容:
#!/bin/bash
xmlstarlet ed -s "student" -t elem -n name -v "" -s "student" \
-t elem -n age -v "" test.xml | xmlstarlet fo -o -
用法:
$ . test.sh John 35
输出:
<student>
<name>John</name>
<age>35</age>
</student>
文档 link:http://xmlstar.sourceforge.net/doc/UG/xmlstarlet-ug.html#idm47077139594320
sed -i "s/<\/student>/ <name><\/name>\n <age><\/age>\n<\/student>/g" pom.xml
请记住,不建议使用 sed 或 awk 解析 xml,请在此处搜索 parse xml bash
在解决这个问题几天后!!我想出了一个解决方案
#!/bin/bash
newLine=\n
sed -i "s/<\/student>/ <name><\/name>${newLine}\
<age><\/age>${newLine}\
<\/student>/g" pom.xml
创建新行 \n
变量并将其添加到每行的末尾...
我有一个简单的 xml 文件,有点像:
<student>
</student>
我正在使用这个 sed 命令:
sed -i "s/<\/student>/ <name><\/name>\
<age><\/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 数据!!
提前感谢您的帮助!!
XML是一种标记语言,它的语义不应该是parsed/manipulated和sed
这样的工具。使用合适的 XML/HTML parsers/processors.
使用xmlstarlet
工具:
样本test.xml
内容:
<student>
</student>
test.sh
脚本内容:
#!/bin/bash
xmlstarlet ed -s "student" -t elem -n name -v "" -s "student" \
-t elem -n age -v "" test.xml | xmlstarlet fo -o -
用法:
$ . test.sh John 35
输出:
<student>
<name>John</name>
<age>35</age>
</student>
文档 link:http://xmlstar.sourceforge.net/doc/UG/xmlstarlet-ug.html#idm47077139594320
sed -i "s/<\/student>/ <name><\/name>\n <age><\/age>\n<\/student>/g" pom.xml
请记住,不建议使用 sed 或 awk 解析 xml,请在此处搜索 parse xml bash
在解决这个问题几天后!!我想出了一个解决方案
#!/bin/bash
newLine=\n
sed -i "s/<\/student>/ <name><\/name>${newLine}\
<age><\/age>${newLine}\
<\/student>/g" pom.xml
创建新行 \n
变量并将其添加到每行的末尾...