Skip to content

Latest commit

 

History

History
82 lines (58 loc) · 1.93 KB

2.md

File metadata and controls

82 lines (58 loc) · 1.93 KB

##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

运行结果:

shell 代码运行结果

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

运行结果:

python 代码运行结果