正则表达式 - 找到字符串后显示的值,(TCL)

时间:2014-12-14 13:19:50

标签: regex tcl

我想从$outputout_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

2 个答案:

答案 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匹配的次数,即01(方便布尔!),除非您也传入-all选项。