showコマンドにおける「|」と「^」と「スペース」の意味

  • フォーラムは新サイトへ移行しました。
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2019-12-7 13:53
kou179193  半人前   投稿数: 8
CCNP勉強中の者です。お世話になります。

showコマンドにおける
「|(パイプライン)」と「^(キャレット)」の使用方法を最近知ったのですが、こちらについて質問させてください。

例えば、以下コマンドを打ったとします。
R6#show ip int bri
Interface IP-Address OK? Method Status Protocol
FastEthernet0/0 192.168.5.2 YES NVRAM up up
Serial0/0 unassigned YES NVRAM administratively down down
FastEthernet0/1 192.168.8.1 YES NVRAM up up


ここで、以下のように「|」と「^」を組み合わせて打つと下記のようになりました。
R6#show ip int bri | i 0/0 |^Interface
Interface IP-Address OK? Method Status Protocol
FastEthernet0/0 192.168.5.2 YES NVRAM up up
Serial0/0 unassigned YES NVRAM administratively down down

R6#show ip int bri | i 0/0 | ^Interface
FastEthernet0/0 192.168.5.2 YES NVRAM up up
Serial0/0 unassigned YES NVRAM administratively down down


質問したいのは、上記のように、includeと共に、「|」と「^」も使用する場合、「|」の後にスペースを入れると、そのあとに入力された抽出条件は無効化されてしまうのでしょうか。

逆に「i」を使用する場合は「|」のあとにスペースを入れないと弾かれてしまうので、スペースは入れるものだと思っていたので、混乱しています。

どなたか教えて頂けましたら幸いです。
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2019-12-7 23:06
arashi1977  長老 居住地: 広島  投稿数: 1715
引用:
showコマンドにおける
「|(パイプライン)」と「^(キャレット)」の使用方法を最近知ったのですが、こちらについて質問させてください。
えーっと、パイプとキャレットが何を意味するかはご存知ですか?

LPICとか勉強されてるとご存知かもしれませんが、
|(パイプ):標準出力を別の処理の標準入力に接続する(リダイレクト)
^(キャレット):「行頭」を意味する正規表現のメタキャラクタ
です。

そして、実際にIOSのCLIでどう見えるのかというと
#show interfaces | ?
  append    Append redirected output to URL (URLs supporting append operation
            only)
  begin     Begin with the line that matches
  count     Count number of lines which match regexp
  exclude   Exclude lines that match
  format    Format the output using the specified spec file
  include   Include lines that match
  redirect  Redirect output to URL
  section   Filter a section of output
  tee       Copy output to URL
この場合はshow interfacesの出力を別の処理につなげることになります。kou179193さんが例示されたincludeを続けると
#show interfaces | include ?
  LINE  Regular Expression
続けて入力するのは「Regular Expression(正規表現)」であるとなっています。

正規表現として文字列を見た場合
引用:
R6#show ip int bri | i 0/0 |^Interface
Interface IP-Address OK? Method Status Protocol
FastEthernet0/0 192.168.5.2 YES NVRAM up up
Serial0/0 unassigned YES NVRAM administratively down down
これは「"0/0"または行頭から始まる"Interface"」という文字列を意味しますので、そのとおりの出力になります。

引用:
R6#show ip int bri | i 0/0 | ^Interface
FastEthernet0/0 192.168.5.2 YES NVRAM up up
Serial0/0 unassigned YES NVRAM administratively down down
「"0/0"を含むもの」で区切られてしまっているので、ここで正規表現とみなされなくなっているようです。なので最初の条件だけになっていると理解して良いと思います。

ということで、CLIに指定できる文字列は「正規表現文字列」として認識できる「(区切り文字なしの)ひとかたまり」だけが対象となると思ってよいかと思います。

Cisco IOSのCLIにおける正規表現の扱いはこの辺読むとよいかと思います。
https://www.cisco.com/c/ja_jp/td/docs/cian/iosxe/iosxe3s/cg/009/fundamentals-xe-3s-book/fundamentals-xe-3s-book_chapter_0101.pdf

こういうのは周りの経験者の人に聞くと割と教えてもらえるんじゃないかと思いますよ
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2019-12-8 14:09
kou179193  半人前   投稿数: 8
arashi1977様

ご回答ありがとうございました。

区切り文字(スペース)を入れたことでひとかたまりとして認識されなかった、という事なのですね。

大変参考になりました。
マニュアルについてもありがとうございました。

  >フォーラム検索へ


Copyright (c) 2020 Ping-t All rights reserved.