以下是我尝试在shell脚本中使用expect执行的代码。
send "date +%d%m%y \n"
set date1 "$expect_out(buffer)"
puts "$date1"
expect "#"
我得到的输出是
date +%d%m%y
111217
有没有办法抑制命令(日期+%d%m%y)并且只将输出存储在变量日期1中?
答案 0 :(得分:0)
试试这个:期望看到6个数字作为整个单词
send "date +%d%m%y\r" ;# typically we use \r to "hit enter"
expect -re {\m(\d{6})\M}
set date1 "$expect_out(1,string)"
puts "$date1"
expect "#"
更一般地说,要选择第一行(命令)和最后一行(提示)之间的文本,您可以这样做:
lassign [regexp -inline {.*?\n(.*)\r\n#} $expect_out(buffer)] _ date1
其中_
是一个抛弃变量,用于保存正则表达式的整个匹配文本,而date1
只会保留捕获的文本。
有关Tcl正则表达式语法,请参阅https://tcl.tk/man/tcl8.6/TclCmd/re_syntax.htm。
如果没有lassign
,您可以写
regexp {.*?\n(.*)\r\n#} $expect_out(buffer) _ date1