Как извлечь определенное число из строки буфера Expect?

Я хотел бы получить общую память хоста с помощью сценария Expect. Благодаря ответам, которые я получил в разделе Get Total Memory хоста с LINUX/EXPECT Теперь я ближе к окончательному решению. (Спасибо Гленну Джекману и Сорпигал).

После подключения к хосту я выполняю следующую строку:

send "cat /proc/meminfo | grep MemTotal | awk '{print \$2}'\r"

Он возвращает нужное мне значение, но когда я получаю значение, содержащееся в $expect_out(buffer), оно содержит гораздо больше информации, чем мне нужно, включая предложения отправки и флаги предыдущей и последующей командной строки. Я точно получаю следующее, используя exp_internal 1:

expect: set expect_out(buffer) "17# cat /proc/meminfo | grep MemTotal | awk '{print $2}'\r\n34150400\r\nCBA"

Я хочу извлечь только число ближе к концу, 34150400. Любой намек или идея?


person Antonio    schedule 24.04.2012    source источник


Ответы (1)


regexp "\n(\[0-9]+)" $expect_out(buffer) - num
puts $num   ;# => 34150400

Кстати, это можно сделать и без отправки шелл-команды:

set fid [open /proc/meminfo]
while {[gets $fid line] != -1} {
    if {[regexp {^MemTotal: *(\d+)} $line - memtotal]} {
        break
    }
}
close $fid
puts $memtotal
person glenn jackman    schedule 24.04.2012