python re删除匹配行

发布时间:2019-09-08 09:08:39编辑:auto阅读(1406)

    re.compile(strPattern[, flag]):
    这个方法是Pattern类的工厂方法,用于将字符串形式的正则表达式编译为Pattern对象。
    第二个参数flag是匹配模式,取值可以使用按位或运算符'|'表示同时生效,比如re.I | re.M。
    另外,你也可以在regex字符串中指定模式,比如re.compile('pattern', re.I | re.M)与re.compile('(?im)pattern')是等价的。


    xxx.com文件内容
    $TTL 600 ; 1 day
    @               IN SOA  ns1.xxxx.com. root.xxxx.com.(
                            1002766  ; Serial
                            3600            ; Refresh (1 hour)
                            900             ; Retry (15 minutes)
                            3600000         ; Expire (5 weeks 6 days 16 hours)
                            3600            ; Minimum (1 hour)
                            )
    @       2D      IN      NS      ns1.xxxx.com.
    @       2D      IN      NS      ns2.xxxx.com.
    $ORIGIN xxxx.com.
    ;;
                               IN MX 5  mxbiz1.qq.com.
                               IN MX 10 mxbiz2.qq.com.
                               IN TXT   "v=spf1 include:spf.mail.qq.com ~all"
    auth                       IN MX 5  mail.pub.jumei.com.
    auth                       IN TXT   "v=spf1 ip4:x.x.x.x/24 ip4:x.x.x.x/24 ~all"
    stk                        IN CNAME office.reemake.net.
    signontest                 IN CNAME xxx.xxxx.com.
    qqmaile33f7f2c             IN CNAME mail.qq.com.
    *.kbs                      IN A     192.168.20.222
    flow  IN  A  192.168.49.10
    maven  IN  A  192.168.49.9
    auth     IN      A       192.168.49.11
    auth     IN      A       192.168.49.12
    lynx-auth      IN      A   192.168.49.13
    lynx-auth      IN      A   192.168.49.14



    vim dns.py
    #!/usr/bin/env python
    import sys
    import re
    import os
    
    if __name__ == '__main__':
        content = []
        with open('xxx.com','r') as f:
            with open('xxx.com.bak', 'w') as g:
                #读取原文件行
                for content in f.readlines():
                    #把执行脚本的第一个参数赋予变量x
                    x = sys.argv[1].strip()
                    #匹配拼接以x变量 + 多空格 IN 多空格 A 开头的行 
                    #其中 r'' 是对引号中的字符串,保留字面,不进行转义
                    p = re.compile(r'^'+x+r'\s.+IN\s.+A')
                    #p = re.compile(r'^'+x+r'\w*\s.+IN\s.+A')
                    #最后使用Match实例获得信息,如果不匹配re条件,写把行写到bak文件
                    if not p.match(content):
                            g.write(content)
            #移动bak文件覆盖原来的老文件
            os.rename('xxx.com.bak','xxx.com')
    	    o = sys.argv[1].strip()
    	    v = sys.argv[2].strip()
    	    q = sys.argv[3].strip()
    	    g.write("%s\tIN\tA\t%s\n" % (o,v))
    	    g.write("%s\tIN\tA\t%s\n" % (o,q))
    # ./dns.py auth 192.168.6.69 192.168.6.80
    # diff xxx.com xxxx.com.bak
    636,637d635
    < auth 	 IN 	 A 	 x.x.x.x
    < auth 	 IN 	 A 	 x.x.x.x
    801a800,801
    > auth	IN	A	192.168.6.69
    > auth	IN	A	192.168.6.80
    # cat test 
    wms.web
    wms.rf
    wms.worker
    report.web
    report.worker
    admin
    invoice.web.center
    invoice.worker.center
    invoice.web.cd
    invoice.worker.cd
    jlsext
    jls
    jlsworker
    uds
    udsworker
    separate
    # for i in `cat test`;do ./dns.py $i 10.1.27.49 10.1.27.51;done


关键字