以下示例将使用此配置,该配置取自 http://pennington.net/tutorial/ciscoconfparse/ccp_tutorial.html#slide3
! filename:exampleswitch.conf
!
hostname ExampleSwitch
!
interface GigabitEthernet 1/1
switchport mode trunk
shutdown
!
interface GigabitEthernet 1/2
switchport mode access
switchport access vlan 20
switchport nonegotiate
no cdp enable
!
interface GigabitEthernet 1/3
no switchport
ip address 192.0.2.1 255.255.255.0
这也是取自 http://pennington.net/tutorial/ciscoconfparse/ccp_tutorial.html#slide7
的代码from ciscoconfparse import CiscoConfParse
parse = CiscoConfParse('exampleswitch.conf', syntax='ios')
for intf_obj in parse.find_objects_w_child('^interface', '^\s+shutdown'):
print("Shutdown: " + intf_obj.text)
输出
$ python script.py
Shutdown: interface GigabitEthernet 1/1
$
代码运行良好。但是,除了显示
Shutdown: interface GigabitEthernet 1/1
之外,是否可以在输出中显示整个 interface GigabitEthernet 1/1
块:
interface GigabitEthernet 1/1
switchport mode trunk
shutdown
我猜你正在寻找的是find_blocks。
find_blocks(linespec,exactmatch=False,ignore_ws=False)。 查找与 linespec 匹配的所有兄弟姐妹,然后找到这些兄弟姐妹的所有父母 兄弟姐妹。返回按行号排序的配置行列表, 最低的优先
查看 Ciscoconfparse API 文档,其中包含示例。
所以我想它看起来像这样:
from ciscoconfparse import CiscoConfParse
parse = CiscoConfParse('exampleswitch.conf', syntax='ios')
for intf_obj in parse.find_blocks(r'^\sshutdown'):
print(intf_obj)