grep正则零宽断言二

grep正则零宽断言二

# grep开启perl正则的零宽断言深入理解,测试文件如下
root@bwhhkle:~# cat test
allow 202.178.178.138;
allow 121.196.70.158;
allow 119.19.93.190;
allow 121.197.150.152;
allow 121.120.104.242;
allow 106.186.113.168;   #yprd
allow 106.186.124.137; #xmltvb
allow 119.29.88.111;   #https22
deny all;

需求:取出ip
1. 使用awk
    awk -F "[ ;]+" '/allow/{print $2}' test
2. 使用grep
    grep -Po "(?<=allow\s)[^;]+" test
            \s表空格,也可以直接这么写 (?<=allow ) 也行,但 \s 的移植性更好 ;如果有多个空格,如2个空格,需要这么写  \s{2} ,因为环视【零宽断言】需要固定的长度
(?<=allow\s) 锚定开始,然后向右根据正则规则([^;]+表示非分号的字符贪婪选择)匹配,直到遇到不符合正则的地方停下来(该处即遇到了分号,不符合规则所以停止匹配),最后把满足正则的已经匹配到的打印出来