在 Expect 脚本中使用 AWK
Use AWK in Expect script
我正在尝试制作一个 expect 脚本并需要 AWK 或 sed 在脚本中。
我也有一个像这样的名为 TimeBased_CLI.ini 的文件。
192.168.1.22 is rhost
2022 is port
我的目标是将文件作为变量放入脚本中。
这是我目前的错误脚本
#!/usr/bin/expect -f
set timeout 10
#INPUT Vars from TimeBased_CLI.ini file
set rhost "[exec grep rhost ./TimeBased_CLI.ini | awk "/[[:blank:]]*is[[:blank:]]*/ \{print $1 \}"]"
send_user "$rhost\n"
它给了我
-sh-4.1$ ./test.exp
invalid command name ":blank:"
while executing
":blank:"
invoked from within
"[:blank:]"
invoked from within
"exec grep rhost ./TimeBased_CLI.ini | awk "/[[:blank:]]*is[[:blank:]]*/ \{print $1 \}""
invoked from within
"set rhost "[exec grep rhost ./TimeBased_CLI.ini | awk "/[[:blank:]]*is[[:blank:]]*/ \{print $1 \}"]""
(file "./test.exp" line 5)
我该如何解决?
# [解决了]
我使用的最终命令是这样的:
set rhost "[exec awk {$NF ~ /rhost/ {print ;}} TimeBased_CLI.ini]"
此命令的shell格式为:
awk '$NF ~ /rhost/ {print ;}' TimeBased_CLI.ini
单引号不是 Tcl 的引用机制,因此请支持您的 AWK 表达式。
% set awkCmd {/[[:blank:]]*is[[:blank:]]*/ {print }}
/[[:blank:]]*is[[:blank:]]*/ {print }
% set rhost [exec grep rhost ./TimeBased_CLI.ini | awk $awkCmd]
192.168.1.22
只需使用全 Tcl 解决方案。
set fd [ open ./TimeBased_CLI.ini "r" ]
set buffer [read $fd ]
catch { close $fd }
# Assuming the line we are looking for
# is "rhost is <some IP address>"
if { [ regexp {rhost[ ]*is[ ]*([0-9\.]+)} $buffer match rhost] == 0 } {
send_user "rhost not found!\n"
} else {
send_user "rhost is $rhost\n"
}
我正在尝试制作一个 expect 脚本并需要 AWK 或 sed 在脚本中。
我也有一个像这样的名为 TimeBased_CLI.ini 的文件。
192.168.1.22 is rhost
2022 is port
我的目标是将文件作为变量放入脚本中。
这是我目前的错误脚本
#!/usr/bin/expect -f
set timeout 10
#INPUT Vars from TimeBased_CLI.ini file
set rhost "[exec grep rhost ./TimeBased_CLI.ini | awk "/[[:blank:]]*is[[:blank:]]*/ \{print $1 \}"]"
send_user "$rhost\n"
它给了我
-sh-4.1$ ./test.exp
invalid command name ":blank:"
while executing
":blank:"
invoked from within
"[:blank:]"
invoked from within
"exec grep rhost ./TimeBased_CLI.ini | awk "/[[:blank:]]*is[[:blank:]]*/ \{print $1 \}""
invoked from within
"set rhost "[exec grep rhost ./TimeBased_CLI.ini | awk "/[[:blank:]]*is[[:blank:]]*/ \{print $1 \}"]""
(file "./test.exp" line 5)
我该如何解决?
# [解决了]我使用的最终命令是这样的:
set rhost "[exec awk {$NF ~ /rhost/ {print ;}} TimeBased_CLI.ini]"
此命令的shell格式为:
awk '$NF ~ /rhost/ {print ;}' TimeBased_CLI.ini
单引号不是 Tcl 的引用机制,因此请支持您的 AWK 表达式。
% set awkCmd {/[[:blank:]]*is[[:blank:]]*/ {print }}
/[[:blank:]]*is[[:blank:]]*/ {print }
% set rhost [exec grep rhost ./TimeBased_CLI.ini | awk $awkCmd]
192.168.1.22
只需使用全 Tcl 解决方案。
set fd [ open ./TimeBased_CLI.ini "r" ]
set buffer [read $fd ]
catch { close $fd }
# Assuming the line we are looking for
# is "rhost is <some IP address>"
if { [ regexp {rhost[ ]*is[ ]*([0-9\.]+)} $buffer match rhost] == 0 } {
send_user "rhost not found!\n"
} else {
send_user "rhost is $rhost\n"
}