2015-12-15 3 views
0

В tcl Я даю это так: -Регулярное выражение в Tcl

set promptInfo [oBOTANDROID2 launchVapiEiCmd getinfo] 

и получить результат, как "-

VAPIEI Cmd Rcvd: {state inservice} {type dmc} {description {BOTSP2,10.77.41.154,tcp;(dmc)}} {lines 2} {calls 2} {streams 4} {{primary cm} 10.77.41.11} {{backup cm} } {status {}} {id dmc2} {userid } {{last error} {}} {{delay offer} false} {{Voice Mail client status} {inactive}} {{primary cti} {}} {{backup cti} {}} {{current cti} {}} {{preferred mode} {voip}} {{call type} {voip}} {{domain} {}} {{ixenabled} {no}} {{esrstvernego} {null}} {{ipv4address} {10.77.41.154}} {{ipv6address} {}} {{deploymentmodel} {on-premise}} {{login type} {uc-directory}} {centraluds {}} {{sip port} {42708}} {privacy disabled}

Здесь мне нужно сравнить два ip, который приходит один с BOTSP2 и другими после ipv4address, оба должны быть одинаковыми.

Как извлечь оба IP-адреса?

ответ

1

Вы можете использовать следующий код:

set a {VAPIEI Cmd Rcvd: {state inservice} {type dmc} {description {BOTSP2,10.77.41.154,tcp;(dmc)}} {lines 2} {calls 2} {streams 4} {{primary cm} 10.77.41.11} {{backup cm} } {status {}} {id dmc2} {userid } {{last error} {}} {{delay offer} false} {{Voice Mail client status} {inactive}} {{primary cti} {}} {{backup cti} {}} {{current cti} {}} {{preferred mode} {voip}} {{call type} {voip}} {{domain} {}} {{ixenabled} {no}} {{esrstvernego} {null}} {{ipv4address} {10.77.41.154}} {{ipv6address} {}} {{deploymentmodel} {on-premise}} {{login type} {uc-directory}} {centraluds {}} {{sip port} {42708}} {privacy disabled}} 
regexp {BOTSP2,([\d.]+).*\{ipv4address\}\s*\{([\d.]+)} $a m ip1 ip2 
if {$ip1 eq $ip2} { 
    puts "Equal!" 
} 

См IDEONE demo

Регулярное выражение BOTSP2,([\d.]+).*\{ipv4address\}\s*\{([\d.]+) будет соответствовать BOTSP2,, а затем захватить в 1-й группе один или несколько цифр и точек (= ip1), а затем он будет найдите {ipv4address} + пробелы + {, а затем запишите одну или несколько цифр и точек в группу 2 (ip2).

Вы можете позже проверить строки на равенство.

+0

Вы писали, как это $ a m ip1 ip2 ... что здесь m? –

+0

'm' - вся соответствующая подстрока. '$ a' - вход. 'ipN' - подматрицы, захваченные тексты. –

0

Выход вы получаете вполне может быть истолкован как список Tcl, и, таким образом, вы можете использовать lsearch:

% lsearch -regexp -inline $promptInfo "BOTSP2" 
description {BOTSP2,10.77.41.154,tcp;(dmc)} 
% lsearch -regexp -inline $promptInfo "ipv4address" 
{ipv4address} {10.77.41.154} 

Первый результат может быть очищен с lindex и расколом, а второй с одним lindex. Если вы хотите получить IP-адреса в одной строке:

% lindex [split [lindex [lsearch -regexp -inline $promptInfo "BOTSP2"] 1] ,] 1 
10.77.41.154 
% lindex [lsearch -regexp -inline $promptInfo "ipv4address"] 1 
10.77.41.154 

0 Последователи, которые вы можете сравнить.

Смежные вопросы