Я пытаюсь найти текст между двумя строками, содержащими определенный текст в файле, сопоставив его с помощью awk и regex.
Вот регулярное выражение:
(\ INVITE\ sip\:)(00|\+)(.*)@(?!((10.[1-2]47.(.*))|(172.(.*))))
I 'я пытаюсь использовать негативную перспективу, чтобы исключить конкретные 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
Сам regex работает нормально и возвращает желаемый результат из примера, приведенного ниже в первой строке, но если я добавлю его в AWK, он не будет работать.
INVITE sip: +358XXXXXXX@10.147.XXX.XXX; пользователь = телефон SIP / 2.0
11/01 13: 30: 46.000 172.16.171.80 local0.notice [S =799368583] [SID = 2a0cb4: 31: 22781827] INVITE sip: + 4747XXXXXX; npdi; rn=+47XXXXXX@212.XXX.XXX.XXX; пользователь = телефон SIP / 2.0
11/01 13:30: 46.000 172.16.171.80 local0.notice [S = 799368584] [SID = 2a0cb4: 31: 22781827] INVITE sip: + 47XXXXXX; npdi; rn=+47XXXXXX@172.XXX.XXX.XXX; пользователь = телефон SIP / 2.0
11/01 13: 30: 46.000 172.16.171.80 local0.notice [S = 799368789] [SID = 2a0cb4: 31: 22781828] INVITE sip: 00358XXXXXX@10.47.XXX.XXX; пользователь = телефон SIP / 2.0
Без негативного прогноза это работает, так что возвращаемый результат - это тот, который я бы хотел исключить.