使用正则表达式过滤命令行显示信息
正则表达式
使用display命令查看设备的配置信息和运行状态信息时,可以通过正则表达式过滤不需要的信息。正则表达式(regular-expression)是一种模式匹配工具,用户根据一定的规则构建匹配模式,然后将匹配模式与目标对象进行匹配。正则表达式格式上是由1~256个普通字符和特殊字符组成的字符串。
普通字符
普通字符匹配的对象是普通字符本身。包括所有的大写和小写字母、数字、下划线、标点符号以及一些特殊符号。例如:a匹配abc中的a,20匹配20.1.1.1中的20,@匹配xxx@xxx.com中的@。
特殊字符
为帮助用户灵活地构建匹配模式,正则表达式提供了一些具有特殊含义的专用字符,也称为“元字符”(metacharacter)。这些特殊字符用来规定其它字符在目标对象中的出现模式。表1-4是对特殊字符及其语法意义的使用描述。
表1-4 特殊字符及其语法意义描述特殊字符
功能
举例
\
转义字符。将下一个字符(特殊字符或者普通字符)标记为普通字符。
\*匹配*
^
匹配行首的位置。
^10匹配10.10.10.1,不匹配20.10.10.1
$
匹配行尾的位置。
1$匹配10.10.10.1,不匹配10.10.10.2
*
匹配前面的子正则表达式零次或多次。
10*可以匹配1、10、100、1000、……
(10)*可以匹配空、10、1010、101010、……
+
匹配前面的子正则表达式一次或多次。
10+可以匹配10、100、1000、……
(10)+可以匹配10、1010、101010、……
?
匹配前面的子正则表达式零次或一次。
说明:当前,在华为公司数据通信设备上运用正则表达式输入?时,系统显示为命令行帮助功能。华为公司数据通信设备不支持正则表达式输入?特殊字符。
10?可以匹配1或者10
(10)?可以匹配空或者10
.
匹配任意单个字符。
0.0可以匹配0x0、020、……
.oo.可以匹配book、look、tool、……
()
一对圆括号内的正则表达式作为一个子正则表达式,匹配子表达式并获取这一匹配。圆括号内也可以为空。
100(200)+可以匹配100200、100200200、……
x|y
匹配x或y。
100|200匹配100或者200
1(2|3)4匹配124或者134,而不匹配1234、14、1224、1334
[xyz]
匹配正则表达式中包含的任意一个字符。
[123]匹配255中的2
[^xyz]
匹配正则表达式中未包含的字符。
[^123]匹配除123之外的任何字符
[a-z]
匹配正则表达式指定范围内的任意字符。
[0-9]匹配0到9之间的所有数字
[^a-z]
匹配正则表达式指定范围外的任意字符。
[^0-9]匹配所有非数字字符
最简单的正则表达式不包含任何特殊字符,例如,可以定义一个正则表达式“hello”,它只匹配字符串“hello”。实际应用中,往往是由多个普通字符和特殊字符组合使用,匹配某些特征的字符串。
特殊字符的退化
某些特殊字符如果处在如下的正则表达式的特殊位置时,会引起退化,成为普通字符。
特殊字符处在转义符号‘\’之后,则发生转义,变为匹配该字符本身。
特殊字符“*”、“+”、“?”,处于正则表达式的第一个字符位置。例如:+45匹配+45,abc(*def)匹配abc*def。
特殊字符“^”,不在正则表达式的第一个字符位置。例如:abc^匹配abc^。
特殊字符“$”,不在正则表达式的最后一个字符位置。例如:12$2匹配12$2。
右括号“)”或者“]”没有对应的左括号“(”或“[”。例:abc)匹配abc),0-9]匹配0-9]。
除非特别说明,特殊字符的退化也适用于括号“()”内包含的子正则表达式。
正则表达式的使用方法
交换机采用正则表达式实现管道符的过滤功能。并非所有display命令均支持指定过滤方式,一般只有显示信息较多的命令才支持。
如果显示信息较多,查看过滤后的配置信息时系统需要较长的时间才能获取正确的信息,因此需要用户等待一段时间。
- 在命令中指定过滤方式:在命令行中通过输入begin、exclude或include关键字加正则表达式的方式来过滤显示。
- 在分屏显示时指定过滤方式:在分屏显示时,使用“/”、“-”或“+”符号加正则表达式的方式,可以对还未显示的信息进行过滤显示。其中,“/”等同关键字begin;“-”等同关键字exclude;“+”等同关键字include。
在命令中指定过滤方式
系统支持使用| count,显示使用过滤条件后输出的结果的行数。可以与过滤方式配合使用。
在支持正则表达式的命令中,有三种过滤方式可供选择:
| begin regular-expression:输出以匹配指定正则表达式的行开始的所有行。
即过滤掉所有待输出字符串,直到出现指定的字符串(此字符串区分大小写)为止,其后的所有字符串都会显示到界面上。
| exclude regular-expression:输出不匹配指定正则表达式的所有行。
即待输出的字符串中没有包含指定的字符串(此字符串区分大小写),则会显示到界面上;否则过滤不显示。
| include regular-expression:只输出匹配指定正则表达式的所有行。
即待输出的字符串中如果包含指定的字符串(此字符串区分大小写),则会显示到界面上;否则过滤不显示。
regular-expression为字符串形式(不包括中文),长度范围是1~255。
对于某些输出信息较多的display命令,可以指定输出信息的过滤方式。
before before-line-number:输出符合过滤规则的行和其前面before-line-number行的数据信息。
after after-line-number:输出符合过滤规则的行和其后面after-line-number行的数据信息。
before before-line-number + after after-line-number或者after after-line-number + before before-line-number:输出符合过滤规则的行和其前面before-line-number行、后面after-line-number行的数据信息。
before-line-number和after-line-number参数均为整数形式,取值范围是1~999。
下面举例来说明在命令中指定过滤方式的用法。
例1:执行命令display interface brief,显示不匹配“NULL”的所有行。
<HUAWEI> display interface brief | exclude NULL
PHY: Physical
*down: administratively down
^down: standby
(l): loopback
(s): spoofing
(b): BFD down
(e): ETHOAM down
(dl): DLDP down
(d): Dampening Suppressed
InUti/OutUti: input utility/output utility
Interface PHY Protocol InUti OutUti inErrors outErrors
Eth-Trunk1 down down 0% 0% 0 0
Eth-Trunk17 down down 0% 0% 0 0
LoopBack1 up up(s) 0% 0% 0 0
Vlanif1 up down -- -- 0 0
Vlanif2 down down -- -- 0 0
Vlanif10 down down -- -- 0 0
Vlanif12 down down -- -- 0 0
Vlanif13 down down -- -- 0 0
Vlanif20 up up -- -- 0 0
Vlanif22 down down -- -- 0 0
Vlanif222 down down -- -- 0 0
Vlanif4094 down down -- -- 0 0
例2:执行命令display current-configuration,只显示匹配正则表达式“vlan”的所有行。
<HUAWEI> display current-configuration | include vlan
vlan batch 2 10 101 to 102 800 1000
vlan 2
vlan 10
port trunk pvid vlan 800
undo port trunk allow-pass vlan 1
port trunk allow-pass vlan 10 101 800
undo port hybrid vlan 1
undo port hybrid vlan 1
port hybrid untagged vlan 10
undo port hybrid vlan 1
undo port hybrid vlan 1
例3:通过使用after,输出符合过滤规则的行和对应的数据信息(before用法相同)。
<HUAWEI> display ip routing-table | after 2 include 0.0.0.0
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public
Destinations : 16 Routes : 16
Destination/Mask Proto Pre Cost Flags NextHop Interface
####### The information is filtered #######
10.3.0.0/16 Static 60 0 D 0.0.0.0 NULL0
10.8.0.0/16 Static 60 0 D 0.0.0.0 NULL0
10.18.20.0/24 Direct 0 0 D 10.18.20.254 Vlanif20
10.18.20.254/32 Direct 0 0 D 127.0.0.1 Vlanif20
####### The information is filtered #######
120.0.0.0/8 Static 60 0 RD 120.51.55.1 MEth0/0/1
120.51.55.0/24 Direct 0 0 D 120.51.55.44 MEth0/0/1
120.51.55.44/32 Direct 0 0 D 127.0.0.1 MEth0/0/1
以上举例的显示信息仅为示意,请以设备实际显示为准。
在分屏显示时指定过滤方式
- display current-configuration
- display interface
- display arp
采用分屏显示时,可以在分屏提示符“---- More ----”中指定过滤类型:
/regular-expression:输出以匹配指定正则表达式的行开始的所有行。
-regular-expression:输出不匹配指定正则表达式的所有行。
+regular-expression:只输出匹配指定正则表达式的所有行。
<HUAWEI> display current-configuration !Software Version V200R019C10 # sysname HUAWEI # vlan batch 10 to 11 100 # hotkey CTRL_G "display tcp status" # lldp enable # undo http server enable undo http secure-server enable # dhcp enable # dhcp snooping enable +Vlanif //输入过滤方式 Filtering... interface Vlanif10 interface Vlanif100