我打算写一个bash脚本来从ifconfig -a
中提取我想要的信息然后我看到了这个bash one liner:
/sbin/ifconfig | awk -v RS="\n\n" '{ for (i=1; i<=NF; i++) if ($i == "inet" && $(i+1) ~ /^addr:/) address = substr($(i+1), 6); if (address != "127.0.0.1") printf "%s\t%s\n", $1, address }'
产生的输出如下:
eth1 10.91.5.189
eth2 10.101.3.96
我想删除比这更多的信息...所以我想:
ethX MAC-add IP Bcast Mask
...我怎么能改变上面的一个班轮以获得我之后的输出?
答案 0 :(得分:0)
试试这个,应该有效:
ifconfig -a|awk -v RS="" '{for(i=1;i<=NF;i++){
if($i=="inet")ip=$(i+1);
else if($i=="broadcast")bcast=$(i+1);
else if($i=="ether")mac=$(i+1);
else if($i=="netmask")mask=$(i+1)}
if(ip!="127.0.0.1")print $1,mac,ip,bcast,mask}'
答案 1 :(得分:0)
这是一个基于Kents verson的工作版本:
ifconfig -a|awk -v RS="" '{for(i=1;i<=NF;i++){
if($i=="HWaddr") mac=$(i+1)
else if($i~/addr:[0-9]/) {split($i,a,":");ip=a[2]}
else if($i~/Mask/) {split($i,a,":");mask=a[2]}}
if(ip!="127.0.0.1")print $1,mac,ip,bcast,mask}'
eth0 00:18:71:6a:f0:45 192.168.1.30 255.255.255.0
我已跳过Broad Cast地址,因为它始终是该段中的最后一个IP,通常不需要。