假设我有一个字符串是这样的:如何仅从字符串中获取数字?
blah=-Xms512m
我想要的输出512
。
我知道我可以使用grep
得到它在Linux上是这样的: echo $blah | grep -o -e [0-9]\\+
但是,这并不对Solaris
工作。
任何漂亮的解决方案,以便在Linux和Solaris上兼容? 或至少在Solaris上?
假设我有一个字符串是这样的:如何仅从字符串中获取数字?
blah=-Xms512m
我想要的输出512
。
我知道我可以使用grep
得到它在Linux上是这样的: echo $blah | grep -o -e [0-9]\\+
但是,这并不对Solaris
工作。
任何漂亮的解决方案,以便在Linux和Solaris上兼容? 或至少在Solaris上?
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
优秀。非常感谢。 – pavanlimo 2010-09-16 11:20:16
如果你想完全地蛮力,请尝试使用TR:
echo "blah=-Xms512m" | tr -c -d '[0-9]'
+1。这个解决方案看起来不错。谢谢。 – pavanlimo 2010-09-16 11:20:54
问题不在于它在Solaris上不起作用,问题是(可能)您在Solaris上使用的grep不支持-o。但是grep是这个错误的工具。使用tr。 – 2010-09-16 15:44:50
我同意。这就是我的意思。 – pavanlimo 2010-09-16 17:16:04