【发布时间】:2013-11-07 10:30:36
【问题描述】:
我需要解析来自telnet/ssh 命令的结果数据并对数据采取行动。
作为示例,我想与 spawn 会话(此处为ssh)进行交互,列出当前目录中的文件并仅收集某个扩展名的文件,以便稍后对这些文件执行命令仅限。
到目前为止我得到了什么:
#!/usr/bin/expect
set timeout 3
match_max 10000
set prompt {$ }
spawn ssh $user@$host
expect "password: "
send $pw\r
expect $prompt
# here's the command I need to parse resulting data
send "ls -1\r"
expect -re {(.*)\.log} {
set val $expect_out(1,string)
puts "LOG file: $val"
exp_continue
}
该脚本打开一个ssh 会话,发送命令并显示所有当前目录(日志和其他)中的文件,但我需要处理与给定模式匹配的每个文件,我该怎么做这样做?
脚本输出:
$ DATA:
0_system.log
1_system.log
2_system.log
3_system.log
a.log
a.sh
blah
b.sh
data.csv
【问题讨论】:
-
不要认为你的正则表达式需要大括号和引号
-
@vogomatix 谢谢!已更新。
-
这真的解决了问题吗?我上次做 Expect 大约是 8 年前 :-)
-
我认为您的正则表达式应该放在大括号中 - 请参阅下面的官方回答和讨论。如果您能告诉我们引号或大括号是否有效,我将不胜感激。