Unix - 将XML格式化为单行节点

时间:2015-11-19 19:42:24

标签: xml shell unix

是否有(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>

2 个答案:

答案 0 :(得分:0)

以下是使用trsed的一种方式:

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

它会将结果打印在标准输出