0

您如何解析(和修改)以下配置:(从 olsrd.conf 中提取)

Hna4
{
4.3.2.1 255.255.255.255
#   Internet gateway:
#   0.0.0.0      0.0.0.0
#   more entries can be added:
#   192.168.1.0  255.255.255.0
1.2.3.4 255.255.255.255
2.3.4.5 255.255.255.255
}

我需要这种格式的配置(存储在 bash 变量中):

1.2.3.4 255.255.255.255;2.3.4.5 255.255.255.255

并且还需要这个从这种格式写回 olsrd.conf 文件。

(它类似于 nginx 配置,只是括号从下一行开始。)

经过一番研究,我想出了使用 grep 在 olsrd.conf 中查找“Hna4”的行号,然后从这一点开始找到第一个右括号的行号,然后获取这两个行号之间的所有行,然后解析内容..

有没有其他(更好的)方法来实现这一目标?

4

1 回答 1

1

使用 sed :

$ ips=$(sed -n '/Hna4/,/}/ { /^ *\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/ { N ;/^ *\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/ s/\n/;/ p } } ' < sourcefile)
$ echo $ips
1.2.3.4 255.255.255.255;2.3.4.5 255.255.255.255

更新 :

输出所有 ip :

$ ips=$(sed -n '/Hna4/,/}/ { /}/! { /^ *\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/ { H } };/}/ { x; s/\n/;/g; s/^;//; s/\n}//; p }}' file)
$ echo $ips
4.3.2.1 255.255.255.255;1.2.3.4 255.255.255.255;2.3.4.5 255.255.255.255
于 2016-03-03T22:31:01.170 回答