技術を楽しもう!

IT(ネットワーク)業界を中心に、仕事や趣味等、色々な技術を記録します。

Ciscoのshow runで、親階層の下に合致した内容を表示する

https://www.pakutaso.com/shared/img/thumb/ADIMGL6720_TP_V.jpg

APIを利用したネットワーク機器の設定変更が流行っているとはいえ、 まだまだCLIは現役なので、効率的に操作できるようになっておきたいものです。

問題

例えば下記のような設定がされた機器で、
「channel-group」の行だけ削除したい場合にどうしますか?

interface Ethernet1/1
  description HOST1
  no lldp transmit
  no lldp receive
  switchport mode trunk
  switchport trunk allowed vlan 100,200
  spanning-tree port type edge trunk
  channel-group 1 mode active

interface Ethernet1/2
  description HOST2
  no lldp transmit
  no lldp receive
  switchport mode trunk
  switchport trunk allowed vlan 100,200
  spanning-tree port type edge trunk
  channel-group 2 mode active

interface Ethernet1/3
  description HOST3
  no lldp transmit
  no lldp receive
  switchport mode trunk
  switchport trunk allowed vlan 300-500
  spanning-tree port type edge trunk
  channel-group 3

既存のConfig内容を出力させて、テキストエディタで「no channel-group ~」として投入すれば良いのですが、 関係のない行を手動で削除するのは手間ですし、 「show run | include channel-group」とすると、以下のようになってしまいます。 どのインタフェースなのかわからないので、親階層も一緒に表示してほしいですよね。 この例なら手動でも良いのですが、数十個かつ複数台だったりすると負担が大きいですね。

Switch# show run | include channel-group
  channel-group 1 mode active
  channel-group 2 mode active
  channel-group 3

こんなとき、includeコマンドは正規表現が使えることを思い出してください。 下記のように投入すれば良い感じに出力されます。 厳密には親階層を判定しているわけではなく、「interface」または「channel-group」を含む行を表示しています。

Switch# show run | include interface|channel-group
interface Ethernet1/1
  channel-group 1 mode active
interface Ethernet1/2
  channel-group 2 mode active
interface Ethernet1/3
  channel-group 3

後はテキストエディタに貼り付けて、 「channel-group」を「no channel-group」に置換すれば投入Configの完成です!

おまけ

記事のタイトルからは脱線しますが、便利なフィルタ方法を3点紹介します。

section

特定のワードを含む行と、その配下の内容を表示します。 「begin」でフィルタするよりもスマートかと思います。 Nexus(NX-OS)は、スペースが入る場合にダブルクォーテーションが必要なので注意してください。 CatalystやASAでは使用ことができません。

Switch# show run | section "router bgp"
router bgp 65501
  router-id 192.0.2.1
  timers bgp 10 30
  log-neighbor-changes
  neighbor 192.0.2.2
    remote-as 65502
    update-source loopback0
    address-family ipv4 unicast
    address-family l2vpn evpn
      send-community
      send-community extended
show run <階層名>

show run の後に、表示したい内容(階層)を入力すると 対応する項目が出力されます。

Nexus / ASA / IOS-XRで使用できることは確認しました。 IOSIOS-XEでは使用できません。

RP/0/RSP0/CPU0:Router#show run router bgp
router bgp 65501
 nsr
 bgp router-id 1.1.1.1
 default-information originate
 address-family ipv4 unicast
 !
show run vrf <VRF名>

指定したVRFに関連する箇所を表示させることができます。

Router#show run vrf VRF001
Building configuration...

Current configuration : 687 bytes
ip vrf VRF001
!
!
interface GigabitEthernet0/0
 description HOST1
 no ip address
 duplex auto
 speed auto
 no cdp enable
!
interface GigabitEthernet0/0.999
 encapsulation dot1Q 999
 ip vrf forwarding VRF001
 ip address 2.2.2.2 255.255.255.0
 ip nat inside
 ip virtual-reassembly in
!
interface GigabitEthernet0/1
 description HOST2
 no ip address
 duplex auto
 speed auto
!
interface GigabitEthernet0/1.888
 encapsulation dot1Q 888
 ip vrf forwarding VRF001
 ip address 10.0.0.1 255.255.255.0
 ip nat outside
 ip virtual-reassembly in
!
ip route vrf VRF001 0.0.0.0 0.0.0.0 10.0.0.254
end

まとめ

設定変更時だけでなく、マクロ等で自動で情報収集する場合にも、不要な情報を省くことで容量の節約になったり、 必要な情報を見つけやすくなったりします。 色々と試行錯誤して、効率的にCLIを操作できるようになりましょう!