如何让GREP只选择数值?

use*_*818 19 linux bash grep

df在bash脚本中使用该命令:

df . -B MB | tail -1 | awk {'print $4'} | grep  .[0-9]*
Run Code Online (Sandbox Code Playgroud)

该脚本返回:

99%
Run Code Online (Sandbox Code Playgroud)

但我只需要数字(进行下一次比较).如果我使用grep没有点的正则表达式:

df . -B MB | tail -1 | awk {'print $4'} | grep  .[0-9]*
Run Code Online (Sandbox Code Playgroud)

我一无所获.怎么修?

Ken*_*ent 42

如果你试试:

 echo "99%" |grep -o '[0-9]*'
Run Code Online (Sandbox Code Playgroud)

它返回:

99
Run Code Online (Sandbox Code Playgroud)

以下是grep手册页中-o(或--only-matching标志)的详细信息.

仅打印匹配线的匹配(非空)部分,每个此类部分位于单独的输出线上.输出行使用相同的分隔符作为输入,如果还使用-z( - null-data),则分隔符为空字节(请参阅其他选项).

  • 它对我有用(在OsX上),但也许你需要"extended-regexp"(带有`-E`) (2认同)
  • @FabSa for gnu grep,要使`\ d`有效,你需要`-P`.如果有可用的便携版本,请使用便携版本. (2认同)

Mar*_*tin 9

grep将打印与您提供的模式匹配的任何.如果您只想打印与模式匹配的行部分,可以传递-o选项:

-o, - only-matching 仅打印匹配行的匹配(非空)部分,每个此类部分位于单独的输出行上.

像这样:

echo 'Here is a line mentioning 99% somewhere' | grep -o '[0-9]+'
Run Code Online (Sandbox Code Playgroud)