所以我想得到我的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
答案 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 和网络掩码部分才能使用它系统