2016-10-07 2 views
0

Из следующих выходныхожидать регулярное выражение соответствует все или ничего

[email protected] ~]$ myScript 
Warning: Permanently added '2.2.2.2' (RSA) to the list of known hosts. 
Cookie: 65251-403    EventID: 8900000000 

Answer: 

Как я могу захватить только строку «Cookie: 65251-403 EventID: 8900000000» в переменную?

Следующий код в настоящее время захватывает все от «Предупреждение» до «Ответ:»

set [lindex $argv 0] 
set [lindex $argv 0] 
set timeout 20 

spawn -noecho ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -l $user $ip 

set chalStr "(Cookie)" 
expect { 
    $chalStr { 
     set challengeString $expect_out(buffer) 
     puts "RegEx matched: $challengeString" 
    } 
} 

interact { 
     "ver" { send "sversion|more" } 
} 

Если я заключите выражение, как^Cookie $, то ничто не может сравниться.

+1

$ означает конец строки. Попробуйте просто^Cookie или^Cookie. * $ – racraman

ответ

0

Capture это Cookie: 65251-403 EventID: 8900000000 с ^Cookie.*?$

[EDIT] после того, как ваш комментарий

Вам нужно добавить флаг многострочного - увидеть здесь работает: https://regex101.com/r/7XBeOF/1

Если вы хотите, чтобы соответствовать то же самое без флага m вы также можете сделать так: Cookie.*?\n.

Посмотри здесь работает: https://regex101.com/r/7XBeOF/2

+0

Как только я добавляю выражение^или $, выражение перестает соответствовать, или, по крайней мере, я ничего не распечатываю из строки puts скрипта. –

+0

. Как добавить флаг m ? Использование опции Cookie. *? \ N сокращает захваченное выражение, оставляя часть ответа, но все еще пару новых строк смешиваются в –

+0

. Я не уверен, что ваш текущий текст был несколько строк или нет, вы видели ссылки regex101? попробуйте сделать более сложным: 'Cookie. * \ n? (. (? = Answer :))' (если вы находитесь в режиме с одной строкой) – antoni

0

Как мне удалось сделать то, что нужно было с помощью команды регулярному_выражению ожидать: http://wiki.tcl.tk/989

Делая это, я был в состоянии разделить части мне нужно. Например:

regexp {\d{5}-\d{3}} $expect_out(buffer) part2 

\d{5}-\d{3} спички 5 цифр тира и еще 3 цифры

$expect_out(buffer) принимает выходной текст из буфера, это та часть, которая получает по сравнению с предыдущим регулярным выражением

part2 говорит система для назначения согласованного текста в переменную, называемую part2

Предложения Antoni верны, однако в ожидании $ expect_out (buffer) может быть причиной он ведет себя по-другому

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