別の行にコマンド出力を印刷する

別の行にコマンド出力を印刷する
ip a | egrep '([0-9]{1,3}\.){3}[0-9]{1,3}|enp0s' | grep -e 10 -e 172 -e 192 | awk '{print $2}' | awk '{gsub("/24", "");print}' | xargs

上記のコマンドの出力は次のようになります。

enp0s3: 10.0.2.15 enp0s8: 192.168.56.100

ネットワークカード名で始まる2行を使用して出力を異なる方法で印刷したいと思います。

目的の結果を得るには、出力をどのように編集する必要がありますか?

答え1

私の考えであなたが探しているのは

 ip a | awk '/inet .*enp[0-9]*s[0-9]*/ { print $NF " " gensub(/\/[0-9]*/,"",1,$2); }'

複数のenp0を許可するようにインターフェイス名の一致を変更しました(私のシステムでは、多くのインターフェイスがenp2s *です)。また、ipv6アドレス( 'inet6')を除く 'inet'と行を一致させました。

答え2

迅速で汚い解決策はオプションを提供することxargsです-L 2。ですべての操作を実行する方が良いですawk。非常に強力です。

-e 10与えられた検索文字列がgrep イーサネットアドレスまたはIPv6アドレスと簡単に一致できることがわかりました。

関連情報