从命令
watch -n1 "ifconfig eth0 | grep GiB"
我的输出如下,
RX bytes:730624111504 (680.4 GiB) TX bytes:31815434434 (29.6 GiB)
现在我只想要前五位数(GiB)。我为它写了一个正则表达式,似乎work
(\d{1,4})(?!.*\d)\sGiB
唯一的问题是我无法使用上面显示的命令。
有什么想法吗?
更新这是我想要的
RX字节:730624111504(680.4 GiB)TX字节:31815434434(29.6 GiB)
匹配RX为
4111504和5434434
我的正则表达式适用于http://www.rubular.com/r/HtwFxjCIJm但不适用于命令
答案 0 :(得分:2)
这应该有效
watch -n1 "ifconfig eth0 | grep GiB | awk '{print substr(\$2, length(\$2) -5), substr(\$6, length(\$6) -5) }'"
正如@Kent指出的那样,你可以(应该)摆脱grep,只使用awk,就像这样:
watch -n1 "ifconfig eth0 | awk '\$0~/GiB/{print substr(\$2, length(\$2) -5), substr(\$6, length(\$6) -5) }'"
答案 1 :(得分:1)
在Ubuntu上测试:
echo 'RX bytes:730624111504 (680.4 GiB) TX bytes:31815434434 (29.6 GiB)' |
grep -Po '(\d{7})\s\(.*?GiB\)' | grep -Po '\d{7}'
4111504
5434434
答案 2 :(得分:1)
用这个替换你的grep:
grep -Po '\d{7}(?=\s*\(.*GiB)'
一些注意事项:
GiB
,如果您的服务器重新启动,或者您的网络接口不断向上,您的命令可能无法正常运行。因为它以KiB or Mib