在Expect脚本中使用AWK

问题描述 投票:0回答:2

我正在尝试制作期望的脚本,并且需要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 $1;}} TimeBased_CLI.ini]"

此命令的shell格式为:

awk '$NF ~ /rhost/ {print $1;}' TimeBased_CLI.ini
bash awk pipe expect
2个回答
1
投票

[单引号不是Tcl的引用机制,因此请大括号awk表达式。

% set awkCmd {/[[:blank:]]*is[[:blank:]]*/ {print $1}}
/[[:blank:]]*is[[:blank:]]*/ {print $1}
% set rhost [exec grep rhost ./TimeBased_CLI.ini | awk $awkCmd]
192.168.1.22

参考: Frequently Made Mistakes in Tcl


0
投票

只需使用全部tcl解决方案。

set fd [ open ./TimeBased_CLI.ini "r" ] 
set buffer [read $fd ] 
catch { close $fd }
# assuming line we are looking for is "rhost is <some ip>" 
if { [ regexp {rhost[ ]*is[ ]*([0-9\.]+)} $buffer match rhost] == 0 } {
    send_user "rhost not found!\n"
} else { 
    send_user "rhost is $rhost\n"
}
© www.soinside.com 2019 - 2024. All rights reserved.