如何在TCL期望的字符串中引用shell变量

问题描述 投票:5回答:6

我在Expect脚本中使用以下awk命令来获取特定目标的网关

route | grep $dest | awk '{print $2}'

但是,期望脚本不喜欢上面的语句中的$ 2。

有人知道awk的替代品来执行与上述相同的功能吗?即。输出第二列。

awk expect
6个回答
6
投票

您可以使用剪切:

route | grep $dest | cut -d \  -f 2

使用空格作为字段定界符并拉出第二个字段


5
投票

要回答您的Expect问题,单引号对Tcl解析器没有特殊含义。您需要使用花括号来保护awk脚本的正文:

route | grep $dest | awk {{print $2}}

而且awk可以完成grep的工作,因此您可以省去一个更少的过程:

route | awk -v d=$dest {$0 ~ d {print $2}}

1
投票

切换到另一个实用程序之前,请检查是否更改了字段分隔符。 GNU Awk here中字段分隔符的文档。


1
投票

SED是最好的替代选择。如果您不介意依赖项,那么Perl也应该足以解决任务]


0
投票

根据数据的结构,您可以使用剪切或使用sed来过滤和打印第二列。


0
投票

或者,您可以使用Perl:

perl -ne 'if(/foo/) { @_ = split(/:/); print $_[1]; }'

这将打印每行包含foo的第二个令牌,并以:作为令牌分隔符。

© www.soinside.com 2019 - 2024. All rights reserved.