如何仅从字符串中获取数字?

时间:2010-09-16 10:11:56

标签: shell grep solaris

假设我有一个这样的字符串:

blah=-Xms512m

我希望输出为512

我知道我可以在Linux上使用grep来获取它,如下所示: echo $blah | grep -o -e [0-9]\\+ 但这不适用于Solaris

任何不错的解决方案,以便它兼容Linux和Solaris? 或至少在Solaris上?

2 个答案:

答案 0 :(得分:3)

我知道数字会像这样:

pax> echo 'blah=-Xms512m' | sed 's/[^0-9]//g'
512

它基本上没有任何替换所有非数字字符。当然,它不会做出明智的事情:

pax> echo 'blah77=-Xms512m' | sed 's/[^0-9]//g'
77512

但是,如果你只有一个号码,那就可以了。

如果您只需要第一个号码,可以使用:

pax> echo 'blah77=-Xms512m' | sed -e 's/^[^0-9]*//' -e 's/[^0-9].*$//'
77

最后:

pax> echo 'blah77=-Xms512m' | sed -e 's/[^0-9]*$//' -e 's/^.*[^0-9]//'
512

答案 1 :(得分:3)

如果你想完全暴力,请尝试使用tr:

echo "blah=-Xms512m" | tr -c -d '[0-9]'