正则表达式从一行修剪,得到行中的数字

时间:2017-05-22 00:18:32

标签: regex bash unix grep

需要从proc mem info获取unix系统的总内存信息: 现在这个命令对我来说是正确的: cat /proc/meminfo | grep "MemTotal" 但这会返回整行:

MemTotal:      1024984 kB

我需要进一步修剪该行:

1024984 kB

到目前为止,这是我正在使用的完整命令,但第二部分似乎不起作用:

cat /proc/meminfo | grep "MemTotal" | grep -E -o "([0-9])"

我认为第二个grep至少会返回数字部分,但它根本不会返回任何内容。

任何人都可以帮我纠正这个吗? 感谢。

2 个答案:

答案 0 :(得分:4)

awk更适合此处,对于匹配MemTotal的所有行,打印第2列和第3列

$ grep 'MemTotal' /proc/meminfo
MemTotal:        1024984 kB
$ awk '/MemTotal/{print $2,$3}' /proc/meminfo
1024984 kB


使用grep,如果PCRE可用,则使用可变长度的lookbehind:

$ grep -oP 'MemTotal:\h+\K.*' /proc/meminfo
1024984 kB

答案 1 :(得分:0)

很奇怪,对我来说,它会返回

8
0
8
4
9
0
4

这是因为[0-9]只匹配一个数字。您需要+来匹配至少一个。你也可以放下括号,这里没有任何用处。

grep MemTotal /proc/meminfo | grep -E -o '[0-9]+'