linux - 期望脚本输出
问题描述
我正在尝试使用 Expect 脚本从 FW 输出 ARP 表的大小,以便绘制图表。在下面的代码之后,显示到屏幕的输出如下所示:
/usr/bin/expect -f -<< EOD
spawn ssh test@1.2.3.4
sleep 1
expect {
"*word:" {send "password\r"}
}
sleep 1
expect {
"*>" {send "show arp all | match \"total ARP entries in table\"\r"}
}
sleep 1
expect {
"*>" {send "exit\r"}
}
expect eof
EOD
spawn ssh test@1.2.3.4
FW-Active
Password:
Number of failed attempts since last successful login: 0
test@FW-Active(active)> show arp all | match "total ARP entries in table"
total ARP entries in table : 2861
我想要做的是只能输出表中总 ARP 条目中指示的数值。我假设我需要一些如何做“cut”或“awk”或仅提取数字的东西,但我没有任何运气。任何帮助是极大的赞赏。
解决方案
您将整个命令的输出存储在一个变量中,比如说a
. 这样的事情可能会奏效。由于您使用的是期望,您可能想弄清楚如何将该输出存储为变量,以便您可以操作它。在我的示例中,我将输出存储为 $a。
$ echo $a
total ARP entries in table : 2861
$ echo ${a% *}
total ARP entries in table :
$ echo ${a% *}-
total ARP entries in table : -
$ echo ${a##* }
2861
逻辑解释(BASH 中的参数/变量替换):
1)去除/剥离左侧部分,#
用于到达第一个匹配字符值(从左侧读取/解析),##
用于到达最后一个匹配字符/值。它通过*<value>
在{
}
大括号内给予来工作。
2)删除/剥离右侧部分,%
用于到达第一个匹配字符值(从右侧读取/解析),%%
用于到达最后一个匹配字符/值。它通过<value>*
在{
}
大括号内给予来工作。
或者,如果您不想存储输出或任何内容,那么只需执行以下操作:
show arp all | match "total ARP entries in table" | grep -o "[0-9][0-9]*"
或者(以下假设你不改变
show arp all | match "total ARP entries in table" | sed "s/ *//g"|cut -d':' -f2
推荐阅读
- python - 调用外部脚本
- javascript - 输入字段在 vue-drag-resize 中不起作用
- reactjs - 如何使用 react-router 并通过 react-transition-group 拥有不同类型的动画(或没有)
- javascript - 如何从 PHP 或 JavaScript 中删除 .pdf 限制?
- javascript - 为什么(看似)不相关的 DOM 查找会导致转换受到尊重?
- algorithm - 等级和经验算法
- php - 试图为 get_user_by 获取非对象的属性
- pandas - 使用pandas读取带有几个不确定因素的csv文件
- ios - UIScrollView 内的 UIStackView,增长到最大高度然后滚动
- javascript - JQueryUI Datepicker - 将事件添加到禁用日期