Извлечение содержимого из строки в unix

Когда я бегу,

ps aux | grep dexter | grep ruby | grep -v grep

Это то, что я получаю,

dexter  3285  0.0  0.0  31652  5356 ?  S  00:01  0:01 ruby /home/dexter/script.ruby

У меня есть весь вывод в строке, скажем,

s= dexter  3285  0.0  0.0  31652  5356 ?  S  00:01  0:01 ruby /home/dexter/script.ruby

Мне нужно извлечь /home/dexter/script.ruby из строки. Как я могу добиться этого в unix?


person D3XT3R    schedule 16.05.2013    source источник
comment
Юникс - это операционная система. Ваш вопрос относится к языку программирования оболочки Bourne, то есть sh. Я добавил соответствующий тег.   -  person tripleee    schedule 16.05.2013


Ответы (2)


Используйте awk

ps aux | grep dexter | grep ruby | grep -v grep | awk '{print $11}'
person Community    schedule 16.05.2013
comment
спасибо за вашу помощь, но мне нужна альтернатива awk. Вывод из awk каким-то образом не передается в мой скрипт. - person D3XT3R; 16.05.2013
comment
Тем более, что вы все равно вызываете Awk, это может быть немного изменено. ps aux | awk '/[d]exter/&&/[r]uby/{print $11}'. - person tripleee; 16.05.2013
comment
Используйте подстановку команд для захвата результата: s=$(ps aux | awk '/[d]exter/&&/[r]uby/{print $11}') поместит результат в $s. - person tripleee; 16.05.2013
comment
Однако в образце вывода нужная вам строка выглядит как $12. - person tripleee; 16.05.2013
comment
Для повышения точности можно сказать awk '$1 == "dexter" && $11 == "ruby" { print $12 }' - person tripleee; 16.05.2013
comment
@triplee В вашем первом комментарии почему вы используете класс символов для d и r? - person William Pursell; 20.05.2013
comment
Вместо $12 или $11, вероятно, проще использовать $NF для получения последнего поля. - person William Pursell; 20.05.2013
comment
Потому что некоторые версии ps с некоторыми параметрами будут содержать текст awk-скрипта, а я не хочу, чтобы он совпадал сам с собой. - person tripleee; 20.05.2013

вы можете использовать подстановку параметров bash

 echo '/'${s#*\/}  
person iruvar    schedule 16.05.2013