我正在尝试通过使用awk和regex匹配包含文件中特定文本的两行之间的文本。
这是正则表达式:
(\ INVITE\ sip\:)(00|\+)(.*)@(?!((10.[1-2]47.(.*))|(172.(.*))))
我正尝试使用否定前瞻,以便从结果中排除特定的IP网络:10.147.0.0、10.247.0.0和172.0.0.0
这是我的awk声明:
awk '/(\ INVITE\ sip\:)(00|\+)(.*)@(?!((10.[1-2]47.(.*))|(172.(.*))))/{flag=1}/SOME TEXT/{flag=0}flag' file
正则表达式本身工作正常,并且从下面的第一行示例返回所需的结果,但是如果我将其放在AWK中,它将不起作用。
邀请sip:+358XXXXXXX@10.147.XXX.XXX; user = phone SIP / 2.0
11/01 13:30:46.000 172.16.171.80 local0.notice [S = 799368583] [SID = 2a0cb4:31:22781827]邀请 sip:+ 4747XXXXXX; npdi; rn=+47XXXXXX@212.XXX.XXX.XXX; user =电话 SIP / 2.0
11/01 13:30:46.000 172.16.171.80 local0.notice [S = 799368584] [SID = 2a0cb4:31:22781827]邀请 sip:+ 47XXXXXX; npdi; rn=+47XXXXXX@172.XXX.XXX.XXX; user =电话 SIP / 2.0
11/01 13:30:46.000 172.16.171.80 local0.notice [S = 799368789] [SID = 2a0cb4:31:22781828]邀请 sip:00358XXXXXX@10.47.XXX.XXX; user =电话SIP / 2.0
没有负面的前瞻效果,因此返回的结果正是我要排除的结果。