linux - 从变量输出中获取特定行

标签 linux string bash shell sed

我需要从分配给 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 packets received 结果的numeric 值,不包括“packets received” 部分。我试过做一些正则表达式。然后发现这个 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 运行 $() 之间的内容并将输出分配给变量。

关于linux - 从变量输出中获取特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33762929/

相关文章:

linux - 如何在 linux 中使用文本文件中的值转到目录

c - sockaddr 结构 - (sys/socket.h)

python 3 : Converting A Tuple To A String

image - 批处理 .png 到 .webp

linux - 在 bash 中,只有一个变量的 if 语句的计算结果是什么?

c - gcc 宏定义选项不适用于字符串

linux - 将 dd 镜像写入 NFS (AWS EFS)

python - python 中字符串中变音符号/重音符号的替换

php - 从字符串中删除所有 html 标签的最佳方法是什么?

bash - 如何从第二次出现到文件末尾删除?