Glab

正则表达式02:实战


1.前言

由于正则存在很多的流派,所以某些情况下可能会有记忆混淆的情况. 多做测试即可
比如在 grep -E , grep -P, sed 中对"+"的处理, 如果发现没有达到预期的效果,可以尝试添加转移符"+".

2.测试

在linux 终端下, 我们可以利用echo来制造字符串,在使用grep或者sed等工具来测试. 当然很多网站提供正则的测试.
echo aabbcc |grep '[ab]+'
echo aabbcc |grep '[ab]+' -o # 结合-o选项可以只输出匹配的字符串,可以用来观察是否正确的匹配.

3.实战

grep -oP '((?<=GET\s)|(?<=POST\s))[^?\s]+' storm.log

grep -Po '(?<=binVersion=\")[^\"]+'   start.php
grep -Po '(?<=versionNum=\")[^\"]+'   start.php

ifconfig  eth0|grep -Po '(?<=inet addr:).+(?=Bcast)'   #获取ip

echo '<b>xx</b>' |grep -Po '(?<=<(b)>).+(?=</\1>)'  # html取值xx

# python (pcre)
>>> s
'get /xx/a.html http/1.1 xxx http/1.1 get /xzz/b.html http/1.1'

>>> re.split('get.+?(?:(?<=http/1.1)|$)',s)
['', ' xxx http/1.1 ', '']

>>> re.findall('get.+?(?:(?<=http/1.1)|$)',s)
['get /xx/a.html http/1.1', 'get /xzz/b.html http/1.1']


 cat aaa |grep  -o '[[:digit:]]\{0,\}' # 是两个[]
=cat aaa |grep  -o '[0-9]\{0,\}'

echo '/usr/local/bin/python'|grep '[^/]*' -o    #以/分割

grep '\([a-z]\)\1\1\+'       #匹配重复字母,  区别于多个字母
grep '\([0-9]\)\1\1'   qq.txt 

echo ' Port'|sed -n '/^[[:space:]]*P/p'     #* 匹配0个或者多个  * 不需要转移
echo ' Port'|sed -n '/^[[:space:]]\+P/p'    #+ 匹配1个或者多个  +需要转移

当前页面是本站的「Baidu MIP」版。查看和发表评论请点击:完整版 »