[英]Get Specific Line From Variable Output
我需要从分配给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数据包接收结果的数值 , 不包括“已接收数据包”部分。 我尝试做一些正则表达式。 然后发现这个sed看起来很有希望,但是我不知道如何使用它,就正则表达式而言。 我很确定我需要用正则表达式完成此操作。
我需要数字值,因为我将比较先前的值和当前值,并检查差异是否在阈值之间。 如果没有,请发送邮件。
只需添加:
PACKETS_RECEIVED=$(echo "${UDP_RAW_VALUE}" | sed -n 's/^ *\([0-9][0-9]*\) packets received$/\1/p')
它将打印从命令的RAW输出保存的内容。 ""
很重要,否则它将在不需要的一行中打印所有输出。
sed命令-n表示默认情况下不打印行。 该s///p
命令告诉是替代模式的前两个之间/
/
与\\1
,这是在图案中的基团,其之间\\(
和\\)
; 在我们的情况下,这就是您想要的电话号码。
PACKET_RECEIVED=$()
部分告诉bash运行$()
之间的内容,并将输出分配给变量。
如果您不介意,也许是另一种sed解决方案?
UDP_RAW_VALUE=`netstat -su|sed -n '/Udp/{n;s/[^0-9\n]//g;p}'`
/Udp:/
#查找所有具有Udp的行
n
#获取下一行,删除所有剩下的数字
p
#打印
或awk
UDP_RAW_VALUE=`netstat -su|awk '$0~/Udp:/{getline;print $1}'`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.