Как получить только цифры из строки? - PullRequest
0 голосов
/ 16 сентября 2010

Предположим, у меня есть такая строка:

blah=-Xms512m

Я хочу получить вывод как 512.

Я знаю, что могу получить его, используя grep в Linux вот так: echo $blah | grep -o -e [0-9]\\+ Но это не работает в Solaris.

Какие-нибудь приятные решения, чтобы он был совместим как на Linux, так и на Solaris?Или хотя бы на Солярисе?

Ответы [ 2 ]

3 голосов
/ 16 сентября 2010

Если вы хотите быть полностью грубой силой, попробуйте использовать tr:

echo "blah=-Xms512m" | tr -c -d '[0-9]'
3 голосов
/ 16 сентября 2010

Если вы знаете, что числа будут вместе, как это:

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
...