【发布时间】:2015-11-17 17:06:57
【问题描述】:
我需要从分配给 bash 变量的命令输出中获取一行。
#Gets the netstat values for the UPD packages
UDP_RAW_VALUE=`netstat -su`
##TRYING THIS BUT TOTALLY FAILED.
echo "$UDP_RAW_VALUE" | sed -n "$2"p
我只需要从其中一个命令执行中获取一个特定的值,即
UDP_RAW_VALUE=`netstat -su`
这个特定命令的输出是这样的:
-bash-4.2$ bash MyBashScript
IcmpMsg:
InType0: 14464
InType3: 12682
InType8: 101
InType11: 24
OutType0: 101
OutType3: 34385
OutType8: 15840
Udp:
931752 packets received
889 packets to unknown port received.
0 packet receive errors
1007042 packets sent
0 receive buffer errors
0 send buffer errors
IgnoredMulti: 647095
UdpLite:
IpExt:
InMcastPkts: 1028470
InBcastPkts: 552859
InOctets: 233485843587
OutOctets: 75548840236
InMcastOctets: 44792084
InBcastOctets: 167490770
InNoECTPkts: 317265390
InECT0Pkts: 25289
InCEPkts: 686361
简单地说,我需要读取 931752 个收到的数据包 结果的 numeric 值,不包括“收到的数据包” 部分。我试过做一些正则表达式。然后发现这个 sed 看起来很有希望,但我不知道如何使用它,就正则表达式而言。我很确定我需要用正则表达式来完成。
我需要数值,因为我将比较先前值和当前值并检查差异是否在阈值之间。如果没有,请发送邮件。
【问题讨论】:
-
顺便说一句,为您自己的变量名称使用全大写名称是不好的形式。请参阅pubs.opengroup.org/onlinepubs/009695399/basedefs/… 的 POSIX 规范的第四段,记住环境变量和 shell 变量共享一个命名空间。
-
("IEEE Std 1003.1-2001 的 Shell and Utilities 卷中的实用程序使用的环境变量名称仅由大写字母、数字和 '_'(下划线)中定义的字符组成可移植字符集,不以数字开头。[...] 包含小写字母的环境变量名称的名称空间是为应用程序保留的。 应用程序可以使用来自该名称空间的名称定义任何环境变量无需修改标准实用程序的行为。”)
-
@CharlesDuffy 感谢提供信息的伙伴会注意!
标签: linux string bash shell sed