2014-01-14 67 views
0

我有一个字符串作为如何使用GSUB红宝石

pid ="2006" 

我想更换PID [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

如果不清楚..我们可以关闭它..没有投票.. ..很多.. –

回答

1

你可以使用gsub,但有一个更好的选择:subsub只替换字符串中的第一个匹配项。

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}'而不是'42'。 –