簡體   English   中英

使用bash如何在一行中獲取網絡設備名稱和IP地址?

[英]using bash how can i get the network device name and ip address in one line?

我想獲取網絡接口設備名稱(ens ###)及其關聯的IP地址(###。###。###。###)。 我有解決方案來獲得一個或另一個,但我找不到能夠將每對(Name + IP)輸出到一行的東西。

這是獲取IP的命令

ip address | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'

在這里,我可以得到設備名稱

ip address | grep -v lo | cut -d ' ' -f2 | tr ':' '\n' | awk NF

但是我想要一種方法來獲得兩個輸出每個集合到他們自己的行,這樣的事情

ens32 10.0.0.100
ens33 10.1.0.100

編輯:

這是ip地址的示例輸出

[root@centos ~]# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    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
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.100/23 brd 10.0.1.255 scope global dynamic ens32
       valid_lft 83040sec preferred_lft 83040sec
    inet6 0000::000:0000:0000:0000/64 scope link
       valid_lft forever preferred_lft forever
3: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 10.1.0.100/24 brd 10.0.2.255 scope global dynamic ens33
       valid_lft 1277sec preferred_lft 1277sec
    inet6 0000::000:0000:0000:0000/64 scope link
       valid_lft forever preferred_lft forever

解決方案:

這兩個都會給我相同的期望輸出。 謝謝您的幫助!

ip -o addr show scope global | awk '/^[0-9]:/{print $2, $4}' | cut -f1 -d '/'
ip -o addr show scope global | tr -s ' ' | tr '/' ' ' | cut -f 2,4 -d ' '

嗯,像往常一樣, awk就像一個魅力。

ip address | 
awk '
    /^[0-9]:/{
        name=substr($2, 1, length($2) - 1)
    }
    /^[ ]*inet /{
        split($2, a, "/")
        if (name != "lo")
            print name,a[1]
    }
'

將ouptut:

ens32 10.0.0.100
ens33 10.1.0.100
  1. 如果該行以數字和雙精度數開頭,則從第二個字段中獲取名稱,除了刪除: with substr。
  2. 如果該行以inet和space開頭,則表示第二個arg具有ip地址。 我還通過簡單的拆分刪除了網絡掩碼后綴。
  3. 如果接口名稱為lo ,則不打印輸出,從而過濾環回接口。

如果你需要一個單行,請嘗試這個(感謝Dougie提供更精確的ip命令):

ip -oneline -4 addr show scope global | tr -s ' ' | tr '/' ' ' | cut -f 2,4 -d ' '

-oneline將每個接口的輸出強制為單行。

然后,我們cut出只是接口名稱和IP從輸出, tr anslating有點沿途(用於切擺脫額外的東西)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM