【发布时间】:2015-07-01 03:53:46
【问题描述】:
第一次来电...长期读者。
这是我正在使用的输入示例。
.
.
.
exit
exit
set vsys "dr-site"
set vsys-id 2
set vrouter "dr-site-vr"
unset auto-route-export
exit
set service "service1"
set service "service2"
set zone id 101 "Trust1"
set zone id 201 "Untrust1"
set zone id 301 "DMZ1"
set interface "ethernet3/1.3"
set interface "ethernet3/1.4"
set interface "ethernet3/1.6"
set route 0.0.0.0/0
set address "Untrust1"
set address "Trust1"
set address "DMZ1"
set group address "Untrust1"
set group address "Trust1"
set group address "DMZ1"
set group service
set policy id 100
exit
set policy id 200
exit
set policy id 300
exit
set policy id 400
exit
exit
set vsys "datacenter"
set vsys-id 1
set vrouter "datacenter-vr"
unset auto-route-export
exit
set service "service1"
set service "service2"
set zone id 100 "Trust"
set zone id 200 "Untrust"
set zone id 300 "DMZ"
set interface "ethernet3/1.5"
set interface "ethernet3/1.2"
set interface "ethernet3/1.1"
set route 0.0.0.0/0
set address "Untrust"
set address "Trust"
set address "DMZ"
set group address "Untrust"
set group address "Trust"
set group address "DMZ"
set group service
set policy id 100
exit
set policy id 200
exit
set policy id 300
exit
set policy id 400
exit
exit
set vsys "other"
.
.
.
我需要从set vsys "datacenter"(例如)开始我的范围,当我看到(2)个连续的exit时停止。
通常,我只是:
gsed -n '/set vsys "datacenter"/,/exit/p; file
但我需要模式 #2 来捕捉 (2) 连续退出:
gsed -n '/set vsys "datacenter"/,/exit\nexit/p; file
因此,我的范围匹配对范围 #2 有一个多行模式。
我尝试过使用 sed N 命令,但我做的不对。我还将根据需要使用此 sed 命令解析出 vsys 部分,这些部分始终以 (2) 个连续的 exit 结尾。
根据要求,预期输出应如下所示:
set vsys "datacenter"
set vsys-id 1
set vrouter "datacenter-vr"
unset auto-route-export
exit
set service "service1"
set service "service2"
set zone id 100 "Trust"
set zone id 200 "Untrust"
set zone id 300 "DMZ"
set interface "ethernet3/1.5"
set interface "ethernet3/1.2"
set interface "ethernet3/1.1"
set route 0.0.0.0/0
set address "Untrust"
set address "Trust"
set address "DMZ"
set group address "Untrust"
set group address "Trust"
set group address "DMZ"
set group service
set policy id 100
exit
set policy id 200
exit
set policy id 300
exit
set policy id 400
exit
exit
【问题讨论】:
-
显示给定输入的预期输出。 sed 用于在单独的行上进行简单的替换——这个问题的最简单的解决方案是在 awk 中。
标签: awk sed pattern-matching range