- 论坛徽章:
- 28
|
本帖最后由 我是一隻羊 于 2015-03-11 12:48 编辑
坐等大神,先分享点自己粗浅的经验...
---------------------------------------------------------------我是分割线-------------------------------------------------------------
我觉得,要用好正则,首先最好要清楚在什么环境什么参数什么命令的表达式里,哪些是元字符,哪些不是..哪些字符需要转义哪些不需要...
我现在走的最常见的弯路就是明明正则匹配的思路对了,但是因为有些该转义的地方没转义,或者是不该转义的地方转义了,导致匹配没能生效.
举个比较直观简单的例子...文件10行,每行都是数字- grep -o '[0-9]+' inputfile
复制代码 是匹配不到数字的...- grep -o '[0-9]\+' inputfile
复制代码 是可以的...- egrep -o '[0-9]\+' inputfile
复制代码 是不行的...- egrep -o '[0-9]+' inputfile
复制代码 是可以的....
然后解决办法是...多用..多总结..反正我自己没能找到一个逻辑去一句话概括它.求大神支招.
--------------------------------------------------------------我也是分割线------------------------------------------------------------
然后再说一些基础的匹配思路..以这两天的另一帖为例..- MAC:10:10:10:AE:CF:73 IP:192.168.1.1
复制代码 以sed为例需要匹配MAC地址
思路1,直接匹配这个MAC地址
观察之后得到mac地址的规则,0-9A-F,然后冒号
一开始的思路一般会是这样的,很容易得- sed -r 's/MAC:(([0-9A-F]{2}[:]{0,1})+).*/\1/g'
复制代码 正则熟悉一点之后会是这样..- sed -r 's/MAC:([0-9A-F:]+).*/\1/g'
复制代码 然后是不是有点长?
思路2,找个框框给把要匹配的内容框起来...
一开始的思路一般会是这样..用前面的MAC:和后面的space给框起来..- sed -r 's/MAC:(.+) .*/\1/g'
复制代码 然后这里会有个问题,就当前这个例子来讲是没问题的,但是如果文本是- MAC:10:10:10:AE:CF:73 IP:192.168.1.1 Justforatest
复制代码 .+会贪婪匹配到最后一个space前.
所以又有了下面这种...- sed -r 's/MAC:([^ ]+).*/\1/g'
复制代码 就没问题了...
这只是一个简单的例子,但是多少能说明一些问题,实现匹配的方法有很多,尤其是在复杂的例子中
可见,如果真的要想掌握正则,用好正则,不能把对我们自己的标准定义为仅仅实现而已.要对效率有追求.
在日常的工作中,要善于学习,CU大神很多..来了这里之后我发现进步很快..不管是不是自己的问题,对于别人给出的答案,都要认真思考,然后学会,一定得抱着这个目的才行.
--------------------------------------------------------------我还是分割线------------------------------------------------------------
然后说一下学习方法....太多了,而且首选CU啊..
不非得一直盯着新帖子看,可以多看一些老帖,有需求,然后下面还有大神的解答,往哪找这好事去?
可以先不看大神的回答,自己先想,看看自己究竟差在哪,练得多了就会发现有时候会跟大神的思路碰上,只是有的地方还不太会写,等再练练,有时候就能和大神的答案对上了!
然后就是看看正则这方面的书了..
而且正则大部分时候是和其他命令一起用的,比如sed,awk什么的,可以多看一些这方面的书.结合起来学习更有效率.
推荐一本awk的书,不让发链接,需要的同学可以私信我.链接只是译文,而且没译完...想看原版的书的同学可以搜一下《The AWK Programming Language》
在工作中也要乐于帮助别人,在帮助别人的时候自己也一定会在进步.
--------------------------------------------------------------分割线又来了------------------------------------------------------------
好吧,最后总结一下
综上所述..要用好正则在我理解大概要分成4步的
1.基础知识掌握
2.掌握正则匹配思路
3.勤加练习
4.多做总结
其实对于大部分知识和技能的学习,以上4步都是适用的....好像又说了很多废话....
以上就是我作为一个菜鸟的全部心得了....希望能帮到同样处在学习阶段的同学们.
-------------------------------------------------------------我是最后的分割线------------------------------------------------------------
上班狗表示编辑完毕.... |
评分
-
查看全部评分
|