是否有(unix)shell脚本将XML格式化为单行?
我需要转换以下内容:
<root>
<foo a="1">lorem 1</foo>
<bar value="ipsum 1" />
</root>
<root>
<foo a="2">lorem 2</foo>
<bar value="ipsum 2" />
</root>
...变成这样的东西:
<root><foo a="1">lorem 1</foo><bar value="ipsum 1" /></root>
<root><foo a="2">lorem 2</foo><bar value="ipsum 2" /></root>
答案 0 :(得分:0)
以下是使用tr
和sed
的一种方式:
tr '\n' ' ' < file.xml | sed 's/>[ \t]*</></g' | sed 's/<\/root><root>/<\/root>\n<root>/g'
所以,基本上,你使用tr
用常规空格替换所有新行,因为它比sed
更好地处理多行。然后,您使用sed
修剪额外的空格,最后用新行分隔root
个元素。
UPDATE :该命令现在删除了空格和标签。
答案 1 :(得分:0)
#!/bin/bash
if [ $# -ne 1 ]
then
echo "this script expects one single file name"
exit 1
fi
if [ ! -f $1 ]
then
echo "invalid file name: $1"
exit 2
fi
# suppress leading spaces, then remote '\n', then add '\n' only after </root>
sed 's/^\s*//g' $1 | tr -d '\n' | sed 's,</root>,</root>\n,g'
说你叫它script.sh
你可以执行它:
./script.sh file_containing_the_xml_hunk
它会将结果打印在标准输出
中