2012-04-24 98 views
1

我想通过使用Expect脚本来获取主机的总内存。感谢我在Get Total Memory of a host with LINUX/EXPECT收到的答案,我现在更接近最终解决方案。 (感谢glenn jackmanSorpigal)。如何从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数量。任何暗示或想法?

回答

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