2014-01-14 5 views
0

У меня есть строка, какКак использовать GSUB рубина

pid ="2006" 

Я хочу, чтобы заменить ПИД [2] 006. В настоящее время я пытался использовать следующие

1.9.3p448 :001 > pid = "12345" 
=> "12345" 
1.9.3p448 :002 > pid[0]="[#{pid[0]}]" 
=> "[1]" 
1.9.3p448 :003 > pid 
=> "[1]2345" 

я заменить first_character с [first_character] Так, что мой вопрос, как сделать это с помощью GSUB.

И я должен использовать этот pid для проверки того, что процесс запущен или нет. Для этого я использую следующую команду.

ps aux | grep -e #{pid} 

здесь -e для регулярного подавления так, что моя фактическая команда выглядит
ps aux | grep -e [2]006

+1

Постарайтесь сделать вопрос понятным: что вы хотите заменить, каков желаемый результат? –

+1

Если неясно .. мы можем закрыть его .. без нисходящего голосования .. a lots .. –

ответ

1

Вы можете использовать gsub, но есть лучшая альтернатива: sub. sub заменяет только первое вхождение в строку.

pid = "12345" 
pid.sub(/\d/) { |m| "[#{m}]" } 
# => "[1]2345" 
+0

Да, вы правы, почему я должен использовать gsb, если я хочу просто заменить первое вхождение. – r15

0

Почему вы потрудились изменениями небольшой части строки? Вы можете просто повторно назначить его:

pid = '2006' 
# some code later 
pid = '[1]006'# '2006' will be replaced by the new value, '[1]006' 

gsub или другой метод работает на строку занимает некоторое время, иногда это легче/быстрее просто переназначить значения вместо Мессинг с ним.

Если вы по-прежнему настаивают на изменении первой цифры в вашем pid вы можете использовать регулярное выражение:

pid = '2006' 
pid.gsub /\A\d/, '*' 
# => "*006" 

\A -> Спички начало строки.
\d -> цифра (0-9)

Заменитель '*' с новым значением части вашего PID, который изменился.

Если вы хотите заменить более одного использования цифр {} или другие операторы (here is list of repetition operators:.

pid.gsub /\A\d{3}/, '*' 
#=> "*6" 

В приведенном выше примере, 2006 был заменен *

+0

Я пробовал с 'pid.gsub/\ A \ d /, '[# {pid [0]}]'' но не работаю, я поступаю неправильно? – r15

+0

@ r15 Вы должны использовать '' '' вместо '' '', как это:' pid.gsub/\ A \ d /,' [# {pid [0]}] "'. Строка в '' '' не интерполируется = она не изменится '# {42}' будет производить '# {42}' not '42'. –

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