在bash中匹配单词后的grep数字

时间:2017-03-15 18:00:45

标签: linux bash

我需要获得免费交换并尝试使用grep

命令free -m将其打印为:

              total        used        free      shared  buff/cache   available
Mem:           1823         147        1372           8         302        1485
Swap:           511           0         511

我知道如何获得总交换:

free -m | grep Swap | grep -oP "Swap:\s+\K\w+"

但无法设法获得使用和免费。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

用awk。如果行开始(^),字符串Swap:打印第四列:

free -m | awk '/^Swap:/ {print $4}'

输出:

511

答案 1 :(得分:1)

在grep中,您可以使用Swap:\s+\w+\s+\K\w+作为第二个,Swap:\s+\w+\s+\w+\s+\K\w+作为第三个数字。但是有一个更好的(纯粹的bash)解决方案:

[[ "$(free -m)" =~ Swap:' '*([0-9]+)' '*([0-9]+)' '*([0-9]+) ]]
total="${BASH_REMATCH[1]}"
used="${BASH_REMATCH[2]}"
free="${BASH_REMATCH[3]}"