使用sed / awk将XML转换为文本

时间:2018-08-13 16:28:31

标签: bash shell

我有xml格式的配置文件,我想将其转换为用于防火墙配置的设置命令。

        <entry name="server1">
            <ip-netmask>1.1.1.1</ip-netmask>
            <description>server1</description>
        </entry>
        <entry name="server2">
            <ip-netmask>2.2.2.2</ip-netmask>
            <description>server2</description>
        </entry>

想要转换为

set address server1 ip-netmask 1.1.1.1
set address server2 ip-netmask 2.2.2.2

即使是server1 1.1.1.1,我也可以尝试使用echo更改它们, 尝试使用sed和awk,无法获得所需的输出,有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

这将为您提供帮助。只要您输入的内容与您发布的内容完全一样,它将起作用。 无论如何,如 daniu 所述,请使用特定工具完成此任务:

 sed 's/^ *//g' input.txt | grep -E -v '^(<entry name|</entry)' | sed -E 's#</?(i|d)[a-zAZ-]+>##g' | awk  'BEGIN {ORS=""} !/^ *$/ { if (ticks == 2) { print "\n" ; ticks = 0}; print $1" "; ticks++}' | awk '{ print "set address "$2 " ip-mask "$1" " }'

致谢!

答案 1 :(得分:0)

使用sedpaste,您可以做到:

sed -n 's/.*entry name="\([^"]*\)".*/set address \1/p;
        s/.*<ip-netmask>\([^<]*\)<.*/ip-netmask \1/p' inputfile |\
        paste -d ' ' - -