2011-12-12 53 views
1

我正在嘗試更新工作中的站點生成器。必須完成的一件事是編輯gitosis.conf文件以將回購添加到正確的組。這是如何在我的gitosis.conf文件中設置該塊。Ruby中的Sed問題

[group sites] 
writable = site1 site2 site3 randomsite awesomeness 
members = @devs 

所以經過無數的嘗試,我已經做了一些「進步」,然後一些退步。

sed -i"" -e"/sites/,\$s/writable.*/& PROJECTNAME/" gitosis.conf 

我終於能夠讓代碼CentOS的命令行上工作,但現在如果我嘗試在IRB運行(與反引號Ruby腳本運行它,所以這工作)我得到這個錯誤:

sed: -e expression #1, char 22: unknown command: `&' => ""

「CHAR 22」可能是不正確的,因爲我已經編輯了一些的話一點點地讓這個例子更香草。

這實際上是在ruby腳本中。

gitosis = `sed -i"" -e"/sites/,\$s/writable.*/& PROJECTNAME/" gitosis.conf` 

我一直在尋找無處不在,試圖解決這個問題,但到目前爲止,我一無所獲。我已經閱讀過不同的地方,更好的選擇是ruby -pe爲了保持它紅寶石,但我甚至不知道從哪裏開始。任何建議/輸入將會很棒。謝謝!

+0

我有點困惑,爲什麼你不把一切都紅寶石? –

+0

我剛剛已經做了類似的事情,但在bash中,所以我只是試圖將我的舊腳本轉置到現有的站點生成器中。 –

回答

0

那麼你真的不需要逃避$變量。嘗試使用此 -

的gitosis = sed -i"" -e "/70/,/$/s/75/& #{p}/" gitosis.conf

OR

的gitosis = sed -i"" -e "/70/,$ s/75/& #{p}/" gitosis.conf

雖然我也不太清楚什麼是你打算與你指定這個sed one-liner給變量做。由於它是一個in-line substitution,你會得到一個沒有任何內容的變量。

+0

它可以工作,但代碼會在等於(可寫入PROJECTNAME = ...)之前添加文本。我修好了!我並沒有計劃對變量做任何事情,只是爲了讓自己保持直立。謝謝! –

+0

噢,好的。是的,變量不會有任何東西。但是我不確定你是否打算使用變量作爲測試條件來做一些後續行動,如果變量爲空。但我很高興一切都奏效了! :) –

0

那麼你可以用sed做到這一點,如果你不能做到這一點別的辦法,你可以隨時去無&,如:

gitosis = `sed -i"" -e"/plexus/,\$s/\(writable.*\)/\1 #{projectname}/" gitosis.conf` 

但隨着ruby可以parseandwrite.ini文件和紅寶石腳本將在沒有sed的情況下運行!

0

這是未經測試的代碼,寫在飛,但應該讓你對使用純Ruby的解決方案開始:

# [group sites] 
# writable = site1 site2 site3 randomsite awesomeness 
# members = @devs 

FILENAME = 'gitosis.conf' 

# bail if the group is missing from the command line 
abort('Missing group to add') if (ARGV.empty?) 

# read the file 
contents = File.read(FILENAME) 

# find and extract the "writable" line 
writable = contents[/^writable.+$/] 

# open the new file. This will automagically close it when done. 
File.open("#{FILENAME}.new", 'w') do |fo| 
    # output the current file, replacing the current writable line with one containing the old 
    # contents with the added new group followed by a line-ending. 
    fo.print contents.sub(writable, writable + ' ' + ARGV.shift + "\n") 
end 

# add code here to handle moving/deleting/something with the old file and 
# moving the new file into place. 
+0

好吧,我會給它一個鏡頭。我會讓你知道結果是什麼! –