2010-09-16 43 views
0

假设我有一个字符串是这样的:如何仅从字符串中获取数字?

blah=-Xms512m

我想要的输出512

我知道我可以使用grep得到它在Linux上是这样的: echo $blah | grep -o -e [0-9]\\+ 但是,这并不对Solaris工作。

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

+0

问题不在于它在Solaris上不起作用,问题是(可能)您在Solaris上使用的grep不支持-o。但是grep是这个错误的工具。使用tr。 – 2010-09-16 15:44:50

+0

我同意。这就是我的意思。 – pavanlimo 2010-09-16 17:16:04

回答

3

I F你知道的数字将一起这样的:

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 
+0

优秀。非常感谢。 – pavanlimo 2010-09-16 11:20:16

3

如果你想完全地蛮力,请尝试使用TR:

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

+1。这个解决方案看起来不错。谢谢。 – pavanlimo 2010-09-16 11:20:54