用正则删除不包含某个字符串的行的代码

宇Son同在

宇Son同在

2016-02-19 09:52

在这个颜值当道,屌丝闪边的时代,拼不过颜值拼内涵,只有知识丰富才能提升一个人的内在气质和修养,所谓人丑就要多学习,今天图老师给大家分享用正则删除不包含某个字符串的行的代码,希望可以对大家能有小小的帮助。
先说一下这个可疑的ip,58.63.144.170,据说是一个弱智的蜘蛛,上帝保佑它下地狱。

看过apache日志的朋友应该知道,apache的访问日志的每一行是以访问者的ip开始的。因为日志比较大,所以我是用ultraedit来看的。用ultraedit的时候需要注意,它的正则一共有两种,一种是符合perl规范的,而默认的是ut自带的一种,写法比较特殊。本文中用到的正则表达式都是perl兼容的,ut中这个选项可以在“高级-配置-搜索-正则表达式引擎”中进行修改。

经过一番思索,发现自己掌握的正则表达式中好象没有能直接删除“不包含”一个指定串的用法。思前想后,先写一个包含指定串的再说吧:^(58.63.144.170).*$,测试一下,可以把包含指定ip的行找出来,接下来要做的就是怎么把这些行保留下来而删除另外的行。在尝试了N次以后,我终于放弃了直接删除不包含这个ip的行的想法。怎么办呢?退一步海阔天空!既然不能直接删除,那就迂回一下吧。虽然不能直接删除不包含指定串的行,但删除不包含指定字符的正则我还是会写的:)

先给包含指定ip的行做个标志,这里要用到ut的替换功能。要查找的行:^(58.63.144.170)(.*)。因为日志的每一行都是以数字开始的,所以我选择‘%'做为标志的特殊符号,要替换成的正则为:%$1$2。全部替换以后,包含指定ip的行就变成了这个样子:%58.63.144.170……。接下来,我们再把行首不是‘%'的行删掉,查找:^[^%].*,替换处为空。执行全部替换,日志中只剩下了以‘58.63.144.170'开头的行,大功告成!等等,剩下的空行太难看,让我们把它们干掉,查找:^[rn]*$,替换处为空,执行全部替换,世界终于清静了...

其实本文中用的正则都是很基本的东西,虽然最终没能写出删除包含指定字符串的行的正则,但在迂回中最终也是现实了想要的功能,而且看上去也更清晰一些。有时候退一步未必不是一个更好的选择。
展开更多 50%)
分享

猜你喜欢

用正则删除不包含某个字符串的行的代码

Web开发
用正则删除不包含某个字符串的行的代码

利用正则快速找出两个字符串的不同字符

Web开发
利用正则快速找出两个字符串的不同字符

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

javascript利用正则快速找出两个字符串的不同字符

Web开发
javascript利用正则快速找出两个字符串的不同字符

用正则表达式表示不包含2950的字符串

Web开发
用正则表达式表示不包含2950的字符串

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

php 正则 不包含某字符串的正则表达式

Web开发
php 正则 不包含某字符串的正则表达式

java中对字符串每个字符统计的方法

编程语言 网络编程
java中对字符串每个字符统计的方法

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Ubuntu 32/64位如何安装音乐标签编辑器Kid3

Ubuntu 32/64位如何安装音乐标签编辑器Kid3

C中实现矩阵乘法的一种高效的方法

C中实现矩阵乘法的一种高效的方法
下拉加载更多内容 ↓