1. 程式人生 > >強大靈活的Sublime3正則替換功能

強大靈活的Sublime3正則替換功能

Sublime3的正則替換功能非常強大,在我使用過程中可以非常迅速的實現一些文字修改功能,尤其對資料量龐大的需要批量修改的文字格外厲害,比寫一個python或者java指令碼方便太多。比如批量新增字首,字尾,批量刪除,正則驗證等等,下面一一舉例演示

場景一:批量新增字首

以國內路由表為例,國內路由表羅列了很多IP段,通過這些IP段可以識別一個IP是不是大陸境內的IP,部署在網站上可以達到流量統計,防止攻擊,使用者識別的作用,其原始檔案模樣如下

1.0.1.0/24
1.0.2.0/23
1.0.8.0/21
1.0.32.0/19
1.1.0.0/24
1.1.2.0/23
1.1.4.0/22
1.1.8.0/21
1.1.16.0/20
1.1.32.0/19
1.2.0.0/23
1.2.2.0/24
1.2.4.0/24
...

這個列表有4700多行,現在我想把這些IP段新增到linux netfilter防火牆的ipset功能中去,然後使用iptables設定黑白名單,那麼我需要把這些ip段轉換成shell命令新增到一個ipset列表中,命令格式如下

ipset add chinaroute 1.1.2.0/23

相當於給上面的每行ip段新增一個字首ipset add chinaroute ,然後儲存成可執行檔案執行即可。

首先使用Ctrl+H開啟替換功能,然後像下圖輸入正則表示式


點選Replace All後,立刻就變成了修改完後的結果,速度之快感覺不到CPU在執行,比Python指令碼或者Java指令碼方便太多,結果如下

ipset add chinaroute 1.0.1.0/24
ipset add chinaroute 1.0.2.0/23
ipset add chinaroute 1.0.8.0/21
ipset add chinaroute 1.0.32.0/19
ipset add chinaroute 1.1.0.0/24
ipset add chinaroute 1.1.2.0/23
ipset add chinaroute 1.1.4.0/22
ipset add chinaroute 1.1.8.0/21
ipset add chinaroute 1.1.16.0/20
ipset add chinaroute 1.1.32.0/19
ipset add chinaroute 1.2.0.0/23
ipset add chinaroute 1.2.2.0/24
ipset add chinaroute 1.2.4.0/24
ipset add chinaroute 1.2.5.0/24
ipset add chinaroute 1.2.6.0/23
ipset add chinaroute 1.2.8.0/24
ipset add chinaroute 1.2.9.0/24
ipset add chinaroute 1.2.10.0/23
ipset add chinaroute 1.2.12.0/22
...
這樣把這個檔案新增執行許可權在Linux中直接執行即可

場景二:批量刪除行

這次以GFWList為例,在github上可以下載到dnsmasq版的GFWlist,現在我想把dnsmasq的命令去掉,只保留域名,方便向路由器或者PAC或者代理外掛中直接新增,原始檔樣式如下:

server=/.4tern.com/127.0.0.1#5353
ipset=/.4tern.com/gfwlist
server=/.85.17.73.31/127.0.0.1#5353
ipset=/.85.17.73.31/gfwlist
server=/.adorama.com/127.0.0.1#5353
ipset=/.adorama.com/gfwlist
server=/.agnesb.fr/127.0.0.1#5353
ipset=/.agnesb.fr/gfwlist
server=/.akiba-web.com/127.0.0.1#5353
ipset=/.akiba-web.com/gfwlist
server=/.alien-ufos.com/127.0.0.1#5353
ipset=/.alien-ufos.com/gfwlist
server=/.altrec.com/127.0.0.1#5353
ipset=/.altrec.com/gfwlist
server=/.arena.taipei/127.0.0.1#5353
ipset=/.arena.taipei/gfwlist

這個檔案有9000多行,因為每個域名重複了兩次,所以我們先刪掉一次,如下圖


注意,這裡正則表示式末尾的\n是用來刪除空白行的,如果不寫\n那麼整個待刪行會變成一個空白行,刪除完之後如下

ipset=/.4tern.com/gfwlist
ipset=/.85.17.73.31/gfwlist
ipset=/.adorama.com/gfwlist
ipset=/.agnesb.fr/gfwlist
ipset=/.akiba-web.com/gfwlist
ipset=/.alien-ufos.com/gfwlist
ipset=/.altrec.com/gfwlist
ipset=/.arena.taipei/gfwlist
ipset=/.asianspiss.com/gfwlist
ipset=/.athenaeizou.com/gfwlist
ipset=/.azubu.tv/gfwlist
ipset=/.barracuda.com/gfwlist
ipset=/.beeg.com/gfwlist
ipset=/.bloombergview.com/gfwlist
ipset=/.boysmaster.com/gfwlist
ipset=/.carfax.com/gfwlist
ipset=/.casinobellini.com/gfwlist
...
然後只需要把每行前面的ipset=/和後面的/gfwlist刪掉,只保留中間部分即可,方法如下圖


然後就只剩下網站的根域名了,可以匯入到路由器中去,效果如下

4tern.com
85.17.73.31
adorama.com
agnesb.fr
akiba-web.com
alien-ufos.com
altrec.com
arena.taipei
asianspiss.com
athenaeizou.com
azubu.tv
barracuda.com
beeg.com
bloombergview.com
boysmaster.com
carfax.com
casinobellini.com
centauro.com.br
images.comico.tw
...

場景三:去除錯誤資料

在上面的例子中,有一些錯誤資料比如第二行85.17.73.31並不是一個域名,而是一個IP地址,我們可以使用普通IP地址正則將這些錯誤資料去掉,方法如下圖


點選“Replace All”就可以把這些錯誤行都刪掉