我想做一些简单的正则表达式,所以我试图得到 16。我试过 grep,但我不知道如何写入 \1 或 $1 以仅输出捕获数据,我试过 sed,但我认为我做错了,因为我不熟悉转义。无论如何,我的正则表达式是这样的
(\d+)\%\s*/$
字符串是
# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/xvda 15997904 2404540 12943248 16% /
tmpfs 252456 0 252456 0% /lib/init/rw
tmpfs 252456 36 252420 1% /dev/shm
在这个网站上,输出正是我想要的(将鼠标移到上面即可查看小组比赛)http://regexr.com?2sd12
答案1
awk 非常适合这项任务:
df | awk 'NR > 1 {print $5, $6;}'
表示跳过第一行NR > 1
,然后在所有其他行上打印第 5 和第 6 个空格分隔的字段。结果如下:
65% /
1% /dev
1% /dev/shm
添加以回应评论:
抱歉,演示站点与您的描述不符。虽然有更简单的方法可以做到这一点,但以下是相同的链,但tr
添加了一个,以便您的工具箱中多了一个工具:
df | awk 'NR > 1 {print $5;}' | tr -d '%'
如果你只想要它用于(例如)/dev/shm,那么:
df | awk '/\/dev\/shm$/ {print $5;}' | tr -d '%'
或根:
df | awk '/\/$/ {print $5;}' | tr -d '%'
答案2
您不需要使用某些工具来改变的输出df
,而只需使用df
的--output
选项来限制输出以满足您的需要:
df --output=pcent,target
仅获取%值:
df --output=pcent | tail -n+2 | tr -d '[% ]'
为了获得相同的结果/
:
df --output=pcent / | tail -n+2 | tr -d '[% ]'
答案3
答案4
只是为了好玩,您可以使用 Python 来检索磁盘使用情况。
以下代码片段将显示模式第一次出现时的值(在您的例子中16):
import subprocess
import re
print re.search('(\d+)% /', subprocess.Popen(["df"], stdout=subprocess.PIPE).communicate()[0]).group(1)
如果你想从每一行检索值,那么稍长一点的代码就可以了:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import subprocess
import re
p = subprocess.Popen(["df"], stdout=subprocess.PIPE)
for line in p.stdout:
usage = re.search('(\d+)% /', line.rstrip())
if usage != None:
print usage.group(1)
基本上,它的工作方式相同,只是它逐行读取输出,而不是Popen.communicate()
一次性检索整个输出的调用。