我想从$output
向out_buffer
返回一个值,所以我做了:
set output ""
set out_buffer {Unevictable: 0 kB}
#regexp -line {Unevictable:.* (.*\d).*KB} $out_buffer dummy output
if {!($output == "0")} {
return 0
} else {
puts "Unevictable is OK (equal 0)"
}
它工作正常,但如果out_buffer
如下:
set out_buffer {cat /proc/meminfo | grep Unevictable
Unevictable: 0 kB
root@ltqcpe:/ramdisk/tmp# }
返回为空。我能做什么 ?在任何组合中,Unevictable:
之后的值都会被放入$output
。
答案 0 :(得分:0)
可以通过多种方式编写正则表达式来匹配您的字符串。尝试像
这样的东西if {regexp {Unevictable:\s+(\d+)\s+kB} $out_buffer ignore size } {
puts "size = $size"
}
答案 1 :(得分:0)
您可能希望使用-line
选项regexp
,以便^
和$
能够识别线路。 (也许是-nocase
选项。)然后你可以这样做(我已经用你的样本输入字符串进行了测试):
regexp -line -nocase {^Unevictable:\s*(\d+)\s*kB$} $out_buffer -> size
另请记得检查regexp
的结果;它是RE匹配的次数,即0
或1
(方便布尔!),除非您也传入-all
选项。