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アドレスと簡単に一致できることがわかりました。