我在bash脚本中使用df
命令:如何让GREP只选择数值?
df . -B MB | tail -1 | awk {'print $4'} | grep .[0-9]*
此脚本返回:
99%
但我只需要数(使下比较)。 如果我使用正则表达式grep
不点:
df . -B MB | tail -1 | awk {'print $4'} | grep .[0-9]*
我什么也得不到。 如何解决?
我在bash脚本中使用df
命令:如何让GREP只选择数值?
df . -B MB | tail -1 | awk {'print $4'} | grep .[0-9]*
此脚本返回:
99%
但我只需要数(使下比较)。 如果我使用正则表达式grep
不点:
df . -B MB | tail -1 | awk {'print $4'} | grep .[0-9]*
我什么也得不到。 如何解决?
如果你尝试:
echo "99%" |grep -o '[0-9]*'
它返回:
99
下面是对-o
(或--only-matching
标志)的细节从grep manual page工作。
仅打印匹配行的匹配(非空白)部分,每个这样的部分位于单独的输出行中。输出行使用与输入相同的分隔符,如果还使用了-z(--null-data),则分隔符为空字节(请参阅Other Options)。
grep
将打印任何线匹配您提供的模式。如果你只想打印匹配模式行的一部分,您可以通过-o选项:
-o,--only匹配 只打印匹配的(非空的)部分匹配线,每个这样的部分在一个单独的输出线上。
像这样:
echo 'Here is a line mentioning 99% somewhere' | grep -o '[0-9]+'
这不适用于所有版本的grep。 您将需要-P或-E 因此,这将工作 回声'这是一条提到99%某处的路线'| 'grep -oP'[0-9] +' 或 echo'这是一条提到99%某处的路线'| grep -oP'[0-9] +' –
如何:
df . -B MB | tail -1 | awk {'print $4'} | cut -d'%' -f1
没有必要在这里使用的grep,试试这个:
df . -B MB | tail -1 | awk {'print substr($5, 1, length($5)-1)'}
function getPercentUsed() {
$sys = system("df -h /dev/sda6 --output=pcent | grep -o '[0-9]*'", $val);
return $val[0];
}
不要使用比必要的更多的命令,离开尾巴,grep和切。你可以只用(简单的)这样做的awk
PS:给予块大小连接打印只去persentage是有点傻;-)所以也放弃使用“-B MB”
df。| awk的-F '[多个领域分隔符]' '$ NF == “末场必须恰好 - >安装patition”{$打印(NF-从去年场数)}'
在你的情况下,使用方法:
df . |awk -F'[ %]' '$NF=="/" {print $(NF-2)}'
输出:
如果你想显示百分比符号,你可以离开了-F'[%]的路程和打印领域将移动1场进一步回
df . |awk '$NF=="/" {print $(NF-1)}'
输出:81%
您也可以使用别名'\ d'就像'echo“99%”| grep -o'\ d *'' –
你确定@FabSa吗?你有没有做过测试? AFAK,grep默认使用BRE .. – Kent
它适用于我(是在OsX上),但也许你需要“extended-regexp”(带'-E') –