2014-01-14 69 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'。 –