如何让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只选择数值?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:如何在控制器的几种方法中重用代码片段

viewpager 中的 3 个 android 片段,如何让它们全部存活?

如何让 videoView 在片段内播放?

如何让echarts中y轴的单位位于数值的右上角

条件片段和导航重用

VSCode自定义代码片段——CSS选择器