如何解析(和修改)以下配置:(从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”的亚麻,然后从这一点开始找到第一个右括号的亚麻,然后得到这两个亚麻布之间的所有线,然后解析内容..
还有其他(更好)的方法来实现这个目标吗?
答案 0 :(得分: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