В настоящее время у меня есть скрипт, который входит в систему и запускает команду. Результаты команды похожи на это:Захват ключевых слов из вывода в tcl
version: xxxx
date of installation: yyyyy
all other random stuff
which takes up a whole
lot of other lines
Поскольку я бегу это на многих различных устройств (одного и того же типа), ключевые слова version
и date of installation
всегда будет то же самое. Я хочу запечатлеть и yyyy
, которые будут отличаться в зависимости от устройства.
возможность:
Захват всего вывода и использование Баша выделить слово сразу после версии: или сразу после установки:
с использованием самого Tcl, чтобы сохранить слово после версии: и установка : в файл
Как мне сделать выбор 2? Я пытался Просматривая регулярное выражение из Tcl, но не мог придумать решение
Пересмотренный код, который дает ошибку:
foreach line [split $expect_out(buffer) "\n"] to set $line {
# if ([regexp {^version:} $line ] || [regexp {^date of } $line]){
regexp {^version: (.+)} $line fullmatch vsn
puts $fileId $vsn
regexp {^date of installation: (.+)} $line fullmatch install
puts $fileId $install
#}
}
не был слишком уверен, если заявление, так что я аннулировал его , Остальная часть кода по-прежнему возвращает ошибку, говорящую о такой переменной для vsn
Я искал этот синтаксис, спасибо! – user2883071
Так что это имеет смысл, но как я могу прочитать вывод по строкам, я принимал весь вывод как таковой: expect_output (buffer) – user2883071
В этом случае вы можете настроить цикл как 'foreach line [split $ expect_out (buffer) "\ n"] ', чтобы установить' $ line' в каждую строку данных, а затем проверить регулярные выражения в теле цикла. –