2010-09-16 4 views
0

Предположим, у меня есть строка, как это:Как получить только цифры из строки?

blah=-Xms512m

Я хочу вывод как 512.

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

Любые хорошие решения, чтобы он совместим как с Linux, так и с Solaris? Или по крайней мере на Solaris?

+0

Проблема не в том, что она не работает «на Solaris», проблема (вероятно) в том, что grep, который вы используете на Solaris, не поддерживает -o. Но grep - неправильный инструмент для этого. Используйте tr. –

+0

Согласен. Вот что я хотел сказать. – pavanlimo

ответ

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

Отлично. Большое спасибо. – pavanlimo

3

Если вы хотите быть укомплектовать грубой силы, попробуйте использовать Tr:

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

+1. Это решение тоже выглядит хорошо. Благодарю. – pavanlimo

Смежные вопросы