bash - 在 dhcp conf 文件中提取包含范围的行
问题描述
我想提取包含特定子网范围的文件中的行
输入:
subnet 172.16.31.0 netmask 255.255.255.0 {
# default gateway
option routers 172.16.31.10;
option subnet-mask 255.255.255.0;
option domain-name "aaaaaa";
option domain-name-servers 172.16.31.10;
#option nis-domain "domain.org";
range dynamic-bootp 172.16.31.80 172.16.31.90;
default-lease-time 21600;
max-lease-time 43200;
host test {
hardware ethernet 00:23:8b:42:3f:d1;
fixed-address 172.16.31.3;
}
}
subnet 172.16.31.1 netmask 255.255.255.0 {
# default gateway
option routers 172.16.31.11;
option subnet-mask 255.255.255.0;
option domain-name "aaaaaa";
option domain-name-servers 172.16.31.11;
#option nis-domain "domain.org";
range dynamic-bootp 172.16.31.80 172.16.31.90;
default-lease-time 21600;
max-lease-time 43200;
host test {
hardware ethernet 00:23:8b:42:3f:d8;
fixed-address 172.16.31.4;
}
}
我想为子网 172.16.31.0 提取范围动态引导。
预期输出:
range dynamic-bootp 172.16.31.80 172.16.31.90;
有什么 sed 解决方案吗?
更新:内容的结构将不一样,可能会根据配置要求添加/删除行
试过 -
sed -n '/^subnet 10.172.31.0 netmask/,/^}/{'
-n ' s/^\( *range dynamic-bootp\)./,/^}'
-n '}'
file
解决方案
使用 GNUsed
和bash
:
n="172.16.31.0"
n="${n//./\\.}" # escape every dot
sed -n '/subnet '"$n"' /,/^}/ {/range/{s/^ *//p}}' file
更新以删除前导空格和/或制表符:
sed -n '/subnet '"$n"' /,/^}/ {/range/{s/^[[:space:]]\+//p}}' file
输出:
范围动态引导 172.16.31.80 172.16.31.90;
推荐阅读
- mysql - 如何从上一行中获取日期
- python - 有没有办法覆盖 Python 3.x 中的 print 方法?
- python - 是否可以根据列将 excel 文件拆分为切片?
- scala - Scala / Specs2 : def is(implicit ee: ExecutionEnv) = { "Service" should {...} }
- c++ - 结构中的错误“不允许不完整类型”
- c# - 无法使用 NameSpace.Logon 启动带有特定配置文件的 Outlook
- c++ - QML/QT 最佳实践,用于桌面应用程序?
- vba - OpenArgs 中的 ClearOut 值
- java - 在 intellij 中遇到错误无法解析插件 org.apache.maven.plugins:maven-surefire-plugin:2.5
- ios - Swift:在特定场景下拨打电话并不总是有效