如何让GREP只选择数值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让GREP只选择数值?相关的知识,希望对你有一定的参考价值。
我在bash脚本中使用df
命令:
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-matching仅打印匹配行的匹配(非空)部分,每个此类部分位于单独的输出行上。
像这样:
echo 'Here is a line mentioning 99% somewhere' | grep -o '[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和cut。你只用(一个简单的)awk就可以做到这一点
PS:给出一个块大小的打印只有百分比有点傻;-)所以也离开“-B MB”
df。 | awk -F'[多个字段分隔符]''$ NF ==“最后一个字段必须正好 - >挂载分区”{print $(来自最后一个字段的NF编号)}'
在您的情况下,使用:
df . |awk -F'[ %]' '$NF=="/" {print $(NF-2)}'
输出:81
如果要显示百分比符号,可以离开-F'[%]',打印字段将向后移动1个字段
df . |awk '$NF=="/" {print $(NF-1)}'
产量:81%
以上是关于如何让GREP只选择数值?的主要内容,如果未能解决你的问题,请参考以下文章