特定のパターンで始まるインターフェイスのみを表示する方法

特定のパターンで始まるインターフェイスのみを表示する方法

Open-Vswitchは仮想インターフェイスを作成し、すべて次のモードを持ちます。s[digit]-eth[digit]例:s1-eth1, s1-eth2, s12-eth3, s2-eth3 ...

次の情報を表示したい。-例えば-s1で始まるすべてのインタフェース(この例ではs1-eth1andを提供する必要がありますs1-eth2)

このコマンドを試しましたが、情報の最初の行だけが表示されます。

ここに画像の説明を入力してください。

私は次の情報に興味がありますRX packets, TX packets, erros, HWaddr..

ここに画像の説明を入力してください。

ベストアンサー1

ifconfig出力には各インターフェイス間に空白行がawkあるのでperl。 「段落」は、1つ以上の空行で他のブロックと区別されたテキストブロックです。

たとえば、

ifconfig | awk -v RS='' '/^s1-eth[12]:/ {print}'

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

もはや段落単位で印刷されません。各インターフェイス「レコード」の間に空白行はありません。出力に段落を含めるには、出力レコード区切り記号(ORS)を2つの改行(\n\n)に設定します。例えば

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

ipの代わりに出力を使用して同様の操作を実行するのはifconfig少し複雑です。 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

(私のeth0IPアドレスは、仮想マシンとDockerコンテナ間のブリッジとして設定したため、IPアドレスがありません。IPアドレスはインターフェイスにありますbr0。)

おすすめ記事