python re刪除匹配行

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章