期待:如何抓住部分产出

时间:2014-01-08 11:13:03

标签: expect

我有点期待编程,所以我需要帮助。

这是一个示例会话:

CMD> disable inactive
Accounts to be disabled are:
    albert_a  - UUID abcd-11-2222
    brian_b  - UUID bcde-22-3333
    charley_c  - UUID cdef-33-4444
Starting processing
    ...hundreds of lines of processing...
CMD> quit
Done.

我需要在那里获取用户名和UUID(UUID通过其他方式可用),然后将它们保存到文件中。我该如何做到这一点?

编辑:列表的- UUID(空格划线空间“UUID”)部分是静态的,在“数百行处理”中找不到任何地方,所以我< em>想想我可以匹配那种模式......但是怎么样?

1 个答案:

答案 0 :(得分:1)

假设评论中我的问题的回答是'是',这是我的建议。

首先,您需要生成任何程序将您连接到服务器(ssh,telnet或其他),并登录(期望用户提示,发送密码,期望提示)。你会发现很多样本,所以我会跳过那部分。

一旦你完成了这个,并有一个命令提示符,这就是我将如何发送命令并期望&amp;匹配输出:

set file [open /tmp/inactive-users w]     ;# open for writing and set file identifier

send "disable inactive\r"

expect {
      -re "(\[a-z0-9_\]+)  - UUID" {     ;# match username followed by "  - UUID"
            puts $file "$expect_out(1,string)"     ;# write username matched within parenthesis to file identifier
            exp_continue     ;# stay in the same expect loop in case another UUID line comes
      }
      -re "CMD>" {     ;# if we hit the prompt, command execution has finished -> close file
            close $file
      }
      timeout {     ;# reasonably elegant exit in case something goes bad
            puts $file "Error: expect block timed out"
            close $file
      }
}

请注意,在正则表达式中,我假设用户名只能由小写字母,数字和下划线组成。

如果您需要有关登录件的帮助,请告诉我,但您应该没问题。那里有很多样本。

希望有所帮助!