如何仅显示以特定模式开头的界面

Dim*_*eal 3 regular-expression network-interface ifconfig virtual-interface

Open-Vswitch 创建虚拟接口,它们都有这样的模式:s[digit]-eth[digit]例如:s1-eth1, s1-eth2, s12-eth3, s2-eth3 ...

我想显示- 例如 -所有以 s1 开头的接口的信息(在我们的示例中,它必须给出s1-eth1s1-eth2).

我试过这个命令,但它只显示第一行信息:

在此处输入图片说明

我对这样的信息更感兴趣RX packets, TX packets, erros, HWaddr..

在此处输入图片说明

cas*_*cas 7

ifconfig的输出在每个界面之间有一个空行,使其非常适合在“段落模式”下使用awk或等脚本语言进行阅读和处理perl。“段落”是由一个或多个空行与其他块分隔的任何文本块。

例如:

ifconfig | awk -v RS='' '/^s1-eth[12]:/ {print}'
Run Code Online (Sandbox Code Playgroud)

awk上面的示例将awk的记录分隔符 ( RS) 设置为空字符串,使其处理段落而不是单个行。在这种情况下,每个段落都被测试是否匹配^s1-eth[12]:,如果匹配就打印出来。

我的系统的示例输出:

$ ifconfig | awk -v RS='' '/^(ppp0|lo):/ {print}'
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 64237556  bytes 36962222928 (34.4 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 64237556  bytes 36962222928 (34.4 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1412
        inet ip.ip.ip.ip  netmask 255.255.255.255  destination ip.ip.ip.ip
        ppp  txqueuelen 3  (Point-to-Point Protocol)
        RX packets 28220997  bytes 19305565357 (17.9 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 21719890  bytes 3009382446 (2.8 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
Run Code Online (Sandbox Code Playgroud)

请注意,这不再打印在段落中 - 每个界面“记录”之间没有空行。如果您希望输出中有段落,请将输出记录分隔符 ( ORS) 设置为两个换行符 ( \n\n)。例如

ifconfig | awk -v RS='' -v ORS='\n\n' '/^(ppp0|lo):/ {print}'
Run Code Online (Sandbox Code Playgroud)

ip's 的输出而不是ifconfig's做类似的事情稍微复杂一些。 ip不会产生整齐的段落分隔输出。但是,它确实在一个块中输出每个接口,其中接口编号后跟冒号和一行开头的空格,其余接口详细信息在后面。

要利用这一点,请将 RS 设置为正则表达式 ( (^|\n)[0-9]+:)。匹配后跟一个冒号和空格(任何数字[0-9]+:),这些无论是在文件的开头(^,到第一条记录,否则将被跳过匹配)换行符(或立即)。

例如,在我的系统上:

$ ip addr | awk -v RS='(^|\n)[0-9]+: ' '/^(lo|eth0):/ {print}'
lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether 01:33:ed:b0:13:a9 brd ff:ff:ff:ff:ff:ff
Run Code Online (Sandbox Code Playgroud)

(我eth0没有任何 IP 地址,因为我将它设置为 VM 和 docker 容器的桥接器。IP 地址在br0接口上)