使用命令sed获取ip和subnetmask

时间:2017-02-28 13:15:33

标签: bash unix sed

所以我想得到我的ip地址和子网掩码。 ifconfig的输出应该是"粘贴"来sed。所以sed应该修改输出以便只获取ip和子网掩码。

像:

ifconfig | sed -n -e s/:127\.0\.0\.1 //g -e s/ *inet addr:\([0-9.]\+\).*/\1/gp

编辑:

ifconfig | sed -rn '/((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])/p'

有了这个,我得到了子网掩码和ip但是我也得到了Bcast。如何更改正则表达式以仅获取子网掩码和ip?

编辑输出:

inet Adresse:192.168.142.191 
 Bcast:192.168.255.255  
 Maske:255.255.0.0
 inet Adresse:127.0.0.1 
 Maske:255.0.0.0

我想要这个输出:

inet Adresse:192.168.142.191 
Maske:255.255.0.0

3 个答案:

答案 0 :(得分:0)

试试这个:

ifconfig | grep -v 127.0.0.1 | awk '/inet / {gsub("addr:", "", $2); print $2}; /netmask / {gsub("netmask", "", $2); print $4};'

它的输出不包括环回接口“lo 127.0.0.1”。然后给你并输出如下:

10.0.0.1
255.255.0.0
192.168.1.46
255.255.255.0

每个ip或掩码一行。或者,您只能指定一个正在执行ifconfig eth0而不是ifconfig的界面。这样,您只能打印所需的界面。

如果你想要“inet”,“Adresse”等的确切格式,你可以将它添加到awk:

ifconfig | grep -v 127.0.0.1 | awk '/inet / {gsub("addr:", "", $2); print "inet Adresse:"$2}; /netmask / {gsub("netmask", "", $2); print "Maske:"$4};'

它的输出是:

inet Adresse:10.0.0.1
Maske:255.255.0.0
inet Adresse:192.168.1.46
Maske:255.255.255.0

答案 1 :(得分:0)

为什么不这样使用:

ifconfig |sed -n 's/inet addr:\(.*\)Bcast:.*Mask:\(.*\)/\1 \2/p'

但你需要更多具体的正则表达式用于ip。你可以在谷歌找到它。

答案 2 :(得分:0)

考虑组合 -n 选项以及搜索和替换命令 s / regexp / replacement / 。使其与整行匹配,并将其替换为您需要的位:

ifconfig | sed -rn 's/^.*(inet[0-9. ]+netmask[0-9. ]+).*$/\1/p'

您的 ifconfig 输出似乎与我的不同,因此您可能需要更改 inet 网络掩码部分才能使用它系统