Как извлечь подстроку из строки - PullRequest
2 голосов
/ 15 сентября 2011

У меня есть строка, которая не всегда выглядит одинаково, и из этой строки я хочу извлечь некоторую информацию, если она существует.Строка может выглядеть следующим образом:

myCommand -s 12 moreParameters
myCommand -s12 moreParamaters
myCommand -s moreParameters

Я хочу получить число, т.е. 12 в этом случае, если оно существует.Как мне это сделать?

Большое спасибо!

РЕДАКТИРОВАТЬ: Существует четвертое возможное значение для строки:

myCommand moreParameters

Как можноЯ изменяю регулярное выражение, чтобы охватить и этот случай?

Ответы [ 3 ]

2 голосов
/ 15 сентября 2011
$ a="myCommand -s 12 moreParameters"
$ b="myCommand -s12 moreParamaters"
$ echo $(expr "$a" : '[^0-9]*\([0-9]*\)')
12
$ echo $(expr "$b" : '[^0-9]*\([0-9]*\)')
12
1 голос
/ 15 сентября 2011

Вы можете делать все это без необходимости использования внешних инструментов

$ shopt -s extglob
$ string="myCommand -s 12 moreParameters"
$ string="${string##*-s+( )}"
$ echo "${string%% *}"
12
1 голос
/ 15 сентября 2011

Попробуйте:

n=$(echo "$string"|sed 's/^.*-s *\([0-9]*\).*$/\1/')

Это будет соответствовать -s, за которым следуют пробелы и цифры;и замените всю строку цифрами.

myCommand -s 12 moreParameters => 12
myCommand -s12 moreParamaters => 12
myCommand -s moreParameters => пустая строка

РЕДАКТИРОВАТЬ: Существует четвертое возможное значение для строки:

myCommand moreParameters

Как я могу изменить регулярное выражение, чтобы охватить также этот случай?

...