В настоящее время я оптимизирую ожидаемый сценарий для сбора информации с различных типов устройств Cisco и имею проблему с отдыхом в области регулярных выражений.Большое спасибо за вашу любезную помощь заранее.
Справочная информация / проблема: устройства Cisco Nexus используют «#» и «#» в выводе команды, что влияет на логику сценария, которая использует те же символы для распознавания командной строки перед отправкойследующая команда.
Я мог бы решить большинство проблем, используя это более конкретное определение командной строки:
set prompt {([A-Z,a-z,0-9]+)(%|#|>|\\$)[\\ ]?$}
и затем в сценарии:
expect -re $prompt
send "$cmd\r"
Теперь яЯ хотел сделать это регулярное выражение еще более конкретным: «Начало строки, затем подсказка», добавив символ «^» в начале регулярного выражения, но это не удалось, и сценарий всегда запускается по таймауту перед отправкой следующего cmd.
set prompt {(^[A-Z,a-z,0-9]+)(%|#|>|\\$)[\\ ]?$}
это также не удается
set prompt {^([A-Z,a-z,0-9]+)(%|#|>|\\$)[\\ ]?$}
В журнале я вижу, что к командной строке добавляется CR (^ M, 0x0d).
Еще большеЛюбопытно, что это все еще работает без истечения времени ожидания, так что да, перед приглашением Cisco CLI есть CR:
set prompt {[\x0d]([A-Z,a-z,0-9]+)(%|#|>|\\$)[\\ ]?$}
Но не при использовании «^»
set prompt {^[\x0d]([A-Z,a-z,0-9]+)(%|#|>|\\$)[\\ ]?$}
Когдаиспользуя меньше, чтобы просмотреть файл журнала, я вижу это:
^MDevice123# term len 0^M
^MDevice123# show inventory^M
Hexdump показывает между концом строки и новой строкой с приглашением:
0d 0d 0a 0d (CR CR LF CR)
Любая подсказка, что происходит с моимцель, чтобы сделать регулярное выражение для командной строки более конкретным, описав приглашение от начала до конца строки?