仅从输出中提取数字的命令

仅从输出中提取数字的命令

ssh 到远程设备并拉动数据包丢失计数器。

$ ssh [email protected] cat /proc/net/pf_ring/*eth0* | grep -E "Tot Pkt Lost" 

上述命令的输出:

Tot Pkt Lost       : 1083761951

我需要一个只提取 Tot Pkt 丢失号码的命令。

答案1

如果你有 GNU grep,你可以这样做:

ssh [email protected] 'cat /proc/net/pf_ring/*eth0*' | 
    grep -oP 'Tot Pkt Lost\s*:\s*\K\d+'
1083761951

awk这里可能更简单、更便携:

ssh [email protected] 'cat /proc/net/pf_ring/*eth0*' | 
    awk '/Tot Pkt Lost/{print $NF}'
1083761951

答案2

在这种情况下不需要使用-Ewith,grep因为您不使用扩展正则表达式。您还可以在本地计算机而不是远程系统上扩展通配模式,这可能会产生错误的结果。

因此你的命令应该重写为

ssh [email protected] 'cat /proc/net/pf_ring/*eth0*' |
grep -F 'Tot Pkt Lost'

我在这里使用-Fwithgrep是因为我匹配的是字符串,而不是正则表达式。我还引用了应在远程主机上执行的命令,以便在此处扩展通配模式,而不是在本地扩展。

这应该给你相同的输出:

Tot Pkt Lost       : 1083761951

要从中仅获取数字,只需将其传递grep -E -o '[[:digit:]]+'

ssh [email protected] 'cat /proc/net/pf_ring/*eth0*' |
grep -F 'Tot Pkt Lost' |
grep -E -o '[[:digit:]]+'

或者,使用sed

ssh [email protected] 'cat /proc/net/pf_ring/*eth0*' |
sed -n 's/^Tot Pkt Lost.*: //p'

这将匹配Tot Pkt Lost每行开头及其后面的字符串。它将删除匹配的字符串并打印该行的其余部分。所有其他数据都将被丢弃。

相关内容