如何从Expect缓冲区字符串中提取某个数字?

时间:2012-04-24 13:54:21

标签: expect

我想通过使用Expect脚本获取主机的总内存。感谢我在Get Total Memory of a host with LINUX/EXPECT收到的答案,我现在更接近最终解决方案了。 (感谢glenn jackmanSorpigal)。

连接到主机后,执行以下行:

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。任何提示或想法?

1 个答案:

答案 0 :(得分:2)

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

顺便说一句,你可以在不发送shell命令的情况下执行此操作:

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