2010-08-25 5 views
3

Это, наверное, очень простой вопрос для опытного человека с UNIX, однако я пытаюсь извлечь номер из строки и продолжать получать неправильный результат.UNIX BASH: извлечение номера из строки

Это строка:

8962 ? 00:01:09 java 

этот вывод я хочу

8962 

Но по какой-то причине я получаю точно такую ​​же тетиву. Это то, что я пробовал

pid=$(echo $str | sed "s/[^[0-9]{4}]//g") 

Если кто-нибудь может мне помочь, это будет оценено.

+0

Что делать, если PID не четыре цифры? –

+0

Хм это хороший момент ... – Albinoswordfish

ответ

11

Существует более чем один способ кожи кошки:

[email protected]:~$ echo 8962 ? 00:01:09 java | cut -d' ' -f1 
8962 
[email protected]:~$ echo 8962 ? 00:01:09 java | awk '{print $1}' 
8962 

cut разрезает линию в разных полях, основанной на делиметре или просто байтовых диапазонах, и часто бывает полезной в этих задачах.

awk - это более старый язык программирования, который особенно полезен для создания одной строки за раз.

+0

+1 В этом контексте awk отлично подходит для задания – helpermethod

1

/^[0-9]{4}/ матчи 4 цифры в начале строки

+0

что, если его не 4 цифры? – ghostdog74

+0

Тогда OP должен быть более конкретным –

+0

Можно с уверенностью предположить, что «pid» подразумевает 1-5 цифр (на многих системах). –

2

Я думаю, что это то, что вы хотите:

pid=$(echo $str | sed 's/^\([0-9]\{4\}\).*/\1/') 
+0

Я выбираю этот ответ, потому что он застрял с помощью команды sed: p – Albinoswordfish

2

Pure Bash:

string="8962 ? 00:01:09 java" 

[[ $string =~ ^([[:digit:]]{4}) ]] 

pid=${BASH_REMATCH[1]} 
3

Shell, нет необходимости вызывать внешние инструменты

$ s="8962 ? 00:01:09 java" 
$ IFS="?" 
$ set -- $s 
$ echo $1 
8962 
+1

Не нужно устанавливать 'IFS ="? "', Так как 'set - $ s' будет ломаться на пространствах. –

3

Pure Bash:

string='8962 ? 00:01:09 java' 
pid=${string% \?*} 

Или:

string='8962 ? 00:01:09 java' 
array=($string) 
pid=${array[0]} 
+0

Вы забыли 'pid = $ {string %% *}'. –

+0

@Mark: Верно. И вы забыли 'pid = $ {string/*}' ;-) –

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