我想要一些脚本来将类似 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)
(为什么不呢,如果只使用简单的 Perlstrict
和warnings
源模块) 或在没有额外库的ANSI C中,只是基础(我不希望有人愿意在这里为我编写解析器,但永远不知道)。