##2.ifconfig_reg: 解析ifconfig命令的标准输出,返回一个hash。key是网卡名称 value是对应的ip。
##Answer
Shell 脚本:
说明:使用正则提取 ip 和 网卡。
#!/bin/bash
#
Tmpfile1=$(mktemp)
Tmpfile2=$(mktemp)
Tmpfile3=$(mktemp)
ifconfig | grep '^[^[:space:]]' | awk '{print $1}' > $Tmpfile1
ifconfig | grep -A 1 '^[^[:space:]]' | awk '/addr:/ {print $2}' | awk -F ':' '{print $2}' > $Tmpfile2
paste $Tmpfile1 $Tmpfile2 > $Tmpfile3
cat $Tmpfile3 | while read line;do
key=`echo $line|awk '{print $1}'` value=`echo $line |awk '{print $2}'`
echo $key $value
done
运行结果:
Python2.7 代码:
#!/usr/bin/env python
# coding:utf-8
"""
解析ifconfig 命令的标准输出,返回一个hash。key 是网卡名称value 是对应的ip。
"""
__author__ = 'tianfeiyu'
import subprocess
import re
pattern = re.compile(r'(?<![\.\d])(?:\d{1,3}\.){3}\d{1,3}(?![\.\d])')
tmp_file = open('/tmp/g.log','w')
subprocess.call(['ifconfig'], stdout=tmp_file)
def parse_ifconfig():
pics = {}
pic_list = []
pic_list.append([])
ct = 0
with open('/tmp/g.log') as f:
for line in f:
line = line.strip()
if len(line) > 0:
pic_list[ct].append(line)
else:
ct += 1
pic_list.append([])
for pic in range(len(pic_list)-1):
nc = pic_list[pic][0].split()[0]
resu = pattern.findall(pic_list[pic][1])
if len(resu):
ip = resu[0]
else:
ip = ''
pics[nc] = ip
return pics
if __name__ == '__main__':
resu = parse_ifconfig()
print resu
运行结果: