正则表达式分组与python收集系统ip

.* 代表匹配任意字符,贪婪模式,就是尽可能的向后匹配
.*? 这个能阻止贪婪模式

re 修饰符:
修饰符 描述
re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

 import re
In [1]: ss = '<h1> hello word </h1>'
In [4]: re.findall(r'<.*>',ss)
Out[4]: ['<h1> hello word </h1>']
#只匹配标签
In [6]: re.findall(r'<.*?>',ss)
Out[6]: ['<h1>', '</h1>']

实例:

匹配linux /var/log/message下面的日志

import re
#无名分组
reg_syslog=re.compile(r'\w+\s+\d+\s[\d+:]+\s\w+\s\w+(\[\d+\])?:\s.*')
#有名分组,(<?P自定义名字>)
reg_syslog1=re.compile(r'(?P<logtime>\w+\s+\d+\s[\d+:]+)\s(?P<hostname>\w+)\s(?P<program>\w+(\[\d+\])?:)\s(?P<message>.*)')
ss = "Nov 15 10:24:57 geenk03 abrt[16849]: File '/usr/sbin/keepalived' seems to be deleted"
s=reg_syslog.search(ss)
s1=reg_syslog1.search(ss)
print s.group(0)
print s1.group(0)
#有名分组可以方便将匹配信息保存在字典中
print s1.groupdict(0)

Nov 15 10:24:57 geenk03 abrt[16849]: File ‘/usr/sbin/keepalived’ seems to be deleted
Nov 15 10:24:57 geenk03 abrt[16849]: File ‘/usr/sbin/keepalived’ seems to be deleted

{‘message’: “File ‘/usr/sbin/keepalived’ seems to be deleted”, ‘program’: ‘abrt[16849]:’, ‘hostname’: ‘geenk03’, ‘logtime’: ‘Nov 15 10:24:57’}

利用正则收集ip

[root@geenk03 opt]# cat get_ip.py
#!/usr/bin/env python

import re
from subprocess import Popen,PIPE

def getIfconfig():
    p = Popen(['ifconfig'],stdout=PIPE)
    data = p.stdout.read().split('\n\n')
    return  [i for i in data if i and not i.startswith('lo')]

def parseIfconfig(data):
    re_devname = re.compile(r'(br|eth|em|virbr|bond)[\d]+',re.M)
    re_mac = re.compile(r'HWaddr ([\w:]{17})',re.M)
    re_ip = re.compile(r'inet addr:([\d\.]{7,15})',re.M)
    devname = re_devname.search(data)
    if devname:
    devname = devname.group(0)
    else:
    devname =''
    mac = re_mac.search(data)
    if mac:
    mac = mac.group()
    else:
    mac = ''
    ip = re_ip.search(data)
    if ip:
    ip = ip.group(1)
    else:
        ip = ''
    return {devname: [ip,mac]}

if __name__ == '__main__':
   data =  getIfconfig()
   for i in data:
       print parseIfconfig(i)

[root@geenk03 opt]# ./get_ip.py
{‘eth0’: [‘192.168.1.203’, ‘HWaddr 1C:6F:65:2A:BF:16’]}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值