1

我想要一些脚本来将类似 Junos 的配置数据导出为“类似 CSV”的数据(由选项卡分隔)并返回。样本(和足够的AFAIK)输入可能如下:

firewall {
    filter protect {
        term "protocol bgp" {
            from {
                prefix-list {
                    bgp-peers;
                }
                protocol tcp; ## Any ideas how to preserve comments in output?
                port bgp;
            }
            then accept;
        }
        term protocol_ntp {
            from {
                prefix-list {
                    "protocol ntp";
                }
                protocol udp;
                port ntp;
            }
            then accept;
        }
    }
}

预期的输出如下(条“|”表示预期选项卡的位置):

firewall|filter protect|term "protocol bgp"|from|prefix-list|bgp-peers;
firewall|filter protect|term "protocol bgp"|from|protocol tcp;
firewall|filter protect|term "protocol bgp"|from|port bgp;
firewall|filter protect|term "protocol bgp"|then accept;
firewall|filter protect|term protocol_ntp|from|prefix-list|"protocol ntp";
firewall|filter protect|term protocol_ntp|from|protocol udp;
firewall|filter protect|term protocol_ntp|from|port ntp;
firewall|filter protect|term protocol_ntp|then accept;

乍一看,这个问题似乎很简单,但第二个问题并不是因为双引号。恕我直言,这个问题可以通过一些额外的双引号处理简化为“树到表”和“表到树”问题。老实说,我不知道正确地做到这一点......

我更喜欢按受欢迎程度排序的解决方案(对我来说):in sed(1)(可能非常快),in awk(1)(对我来说不如前一个好),in perl(1)(为什么不呢,如果只使用简单的 Perlstrictwarnings源模块) 或在没有额外库的ANSI C中,只是基础(我不希望有人愿意在这里为我编写解析器,但永远不知道)。

4

1 回答 1

0

这从 XML 转换要容易得多,JunOS 内置支持:

show configuration | display xml

或者更好,试试

show configuration | display set
于 2011-05-25T17:19:55.567 回答