2010-09-16 22 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

相關問題