国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Regex > 正文

用正則刪除不包含某個(gè)字符串的行的代碼

2020-03-16 21:15:32
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

這個(gè)需求發(fā)生在分析apache日志的時(shí)候。在日志中發(fā)現(xiàn)了一個(gè)比較可疑的ip,出現(xiàn)頻率頗高,但每天的日志有幾百萬(wàn)行,如何從中幾百萬(wàn)行中找出需要的數(shù)據(jù)來(lái)進(jìn)行分析呢?

先說(shuō)一下這個(gè)可疑的ip,58.63.144.170,據(jù)說(shuō)是一個(gè)弱智的蜘蛛,上帝保佑它下地獄。

看過(guò)apache日志的朋友應(yīng)該知道,apache的訪(fǎng)問(wèn)日志的每一行是以訪(fǎng)問(wèn)者的ip開(kāi)始的。因?yàn)槿罩颈容^大,所以我是用ultraedit來(lái)看的。用ultraedit的時(shí)候需要注意,它的正則一共有兩種,一種是符合perl規(guī)范的,而默認(rèn)的是ut自帶的一種,寫(xiě)法比較特殊。本文中用到的正則表達(dá)式都是perl兼容的,ut中這個(gè)選項(xiàng)可以在“高級(jí)->配置->搜索->正則表達(dá)式引擎”中進(jìn)行修改。

經(jīng)過(guò)一番思索,發(fā)現(xiàn)自己掌握的正則表達(dá)式中好象沒(méi)有能直接刪除“不包含”一個(gè)指定串的用法。思前想后,先寫(xiě)一個(gè)包含指定串的再說(shuō)吧:^(58.63.144.170).*$,測(cè)試一下,可以把包含指定ip的行找出來(lái),接下來(lái)要做的就是怎么把這些行保留下來(lái)而刪除另外的行。在嘗試了N次以后,我終于放棄了直接刪除不包含這個(gè)ip的行的想法。怎么辦呢?退一步海闊天空!既然不能直接刪除,那就迂回一下吧。雖然不能直接刪除不包含指定串的行,但刪除不包含指定字符的正則我還是會(huì)寫(xiě)的:)

先給包含指定ip的行做個(gè)標(biāo)志,這里要用到ut的替換功能。要查找的行:^(58.63.144.170)(.*)。因?yàn)槿罩镜拿恳恍卸际且詳?shù)字開(kāi)始的,所以我選擇‘%'做為標(biāo)志的特殊符號(hào),要替換成的正則為:%$1$2。全部替換以后,包含指定ip的行就變成了這個(gè)樣子:%58.63.144.170……。接下來(lái),我們?cè)侔研惺撞皇?lsquo;%'的行刪掉,查找:^[^%].*,替換處為空。執(zhí)行全部替換,日志中只剩下了以‘58.63.144.170'開(kāi)頭的行,大功告成!等等,剩下的空行太難看,讓我們把它們干掉,查找:^[/r/n]*$,替換處為空,執(zhí)行全部替換,世界終于清靜了...

其實(shí)本文中用的正則都是很基本的東西,雖然最終沒(méi)能寫(xiě)出刪除包含指定字符串的行的正則,但在迂回中最終也是現(xiàn)實(shí)了想要的功能,而且看上去也更清晰一些。有時(shí)候退一步未必不是一個(gè)更好的選擇。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 克拉玛依市| 汉川市| 湘西| 东乌珠穆沁旗| 新沂市| 安泽县| 云霄县| 楚雄市| 济宁市| 墨玉县| 武平县| 广灵县| 鹤岗市| 孟州市| 积石山| 攀枝花市| 仁化县| 菏泽市| 河间市| 公主岭市| 镇雄县| 驻马店市| 湘西| 双辽市| 简阳市| 满洲里市| 讷河市| 唐海县| 泽州县| 赤壁市| 赣州市| 开封市| 五莲县| 全南县| 竹北市| 湘潭县| 任丘市| 肇州县| 秭归县| 长汀县| 定襄县|