首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash:如何从olsrd配置中读取多行选项(nginx类似)

Bash:如何从olsrd配置中读取多行选项(nginx类似)
EN

Stack Overflow用户
提问于 2016-03-04 06:09:24
回答 1查看 78关注 0票数 0

如何解析(和修改)以下配置:(摘自olsrd.conf)

代码语言:javascript
复制
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变量中):

代码语言:javascript
复制
1.2.3.4 255.255.255.255;2.3.4.5 255.255.255.255

并且还需要它将这种格式写回到olsrd.conf文件中。

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

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

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

EN

回答 1

Stack Overflow用户

发布于 2016-03-04 06:31:01

使用sed:

代码语言:javascript
复制
$ 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地址的步骤:

代码语言:javascript
复制
$ 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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35784062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档