2015-11-19 45 views
0

是否有(unix)shell腳本將XML格式化爲單行?Unix - 將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

下面是使用trsed一個辦法:

tr '\n' ' ' < file.xml | sed 's/>[ \t]*</></g' | sed 's/<\/root><root>/<\/root>\n<root>/g' 

所以,基本上,您正在使用用常規空間替換所有新線,因爲它可以更好地處理多條線,然後sed。然後,您使用sed修剪多餘空格,最後用新行分隔root元素。

UPDATE:該命令現在刪除空格和製表符。

+0

真棒,非常感謝。作品一種享受 –

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

將打印結果在標準輸出