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
在这种情况下不需要使用-E
with,grep
因为您不使用扩展正则表达式。您还可以在本地计算机而不是远程系统上扩展通配模式,这可能会产生错误的结果。
因此你的命令应该重写为
ssh [email protected] 'cat /proc/net/pf_ring/*eth0*' |
grep -F 'Tot Pkt Lost'
我在这里使用-F
withgrep
是因为我匹配的是字符串,而不是正则表达式。我还引用了应在远程主机上执行的命令,以便在此处扩展通配模式,而不是在本地扩展。
这应该给你相同的输出:
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
每行开头及其:
后面的字符串。它将删除匹配的字符串并打印该行的其余部分。所有其他数据都将被丢弃。