从预期输出中删除“...[C[0k”

Remove "...[C[0k" from expect output

如何在通过 expect 脚本发出命令后不生成子字符串“...[C[C[C[0k”? 例如,我在 expect 脚本中有以下几行:

#set variables, parameters etc
...
spawn telnet $IP $PORT
expect -nocase "name:"
send -- "$USER\r"
expect -nocase "password:"
send -- "$PASS\r"
expect -re "$prompt"
send -- "terminal length 0\r"
expect -re "$prompt"
send -- "show vlan\r"
expect -re "$prompt"
send -- "logout\r"
expect eof

执行后我收到不需要的子字符串:

Username:[C[C[C[C[C[C[C[C[C[0Kadmin
Password:[C[C[C[C[C[C[C[C[C[0K**************
switch#
[C[C[C[C[C[C[C[C[C[0Kterminal length 0
switch#[C[C[C[C[C[C[C[C[C[0Kshow vlan
...
#'show vlan' command result here
...
switch#[C[C[C[C[C[C[C[C[C[0Klogout
Connection closed by foreign host.

有没有人告诉我如何才能不生成这些“[C[C[C[C[C[C[C[C[C[0K”字符串?另一个问题是 我不能使用其他工具(sed、awk、tr 等)来删除字符串,我首先需要 expect not generate then。

Expect 不会生成这些,它是您正在连接的 Cisco telnet 服务。它发送转义序列来做一些事情,比如改变颜色。

您可以尝试在调用 expect 之前更改 TERM 变量,或者在 spawn telnet 命令之前在您的 expect 脚本中设置它。尝试设置 TERM=unknown。否则查看您的 telnet 程序支持的参数以禁用转义序列。