2014-10-30 116 views
0
我使用Git的Rails項目

,我有一個老提交文件中的以下行:user_name: 'ENV[GMAIL_SMTP_USER]',替換文本與SED

我試圖替換該行的所有老而犯這樣我就可以摘掉引號(')並將它們替換爲括號內的:user_name: ENV['GMAIL_SMTP_USER'],。我正在使用sed--tree-filter來完成它。如下所示:

git filter-branch --tree-filter "sed -i .bkp s/'ENV[GMAIL_SMTP_USER]'/ENV['GMAIL_SMTP_USER']/g config/environments/development.rb" -f 

此命令正常運行正常,但沒有錯誤,但不會取出引號。另外,我可以說這個命令真的適用於替換,因爲在此之前,我已經成功地將user_name: 'myGmailUserName'更新爲user_name: 'ENV[GMAIL_SMTP_USER]'

問題只在於刪除了引號。什麼不見​​了?

在此先感謝。

+0

我想你只需要刪除'-i'和'.bkp'之間的空格。 – ooga 2014-10-30 20:29:39

+0

感謝您回覆@ooga,但它沒有奏效。它運行沒有錯誤,但不能完成報價的重新定位。 – 2014-10-30 20:36:57

回答

0

正如居魯士的建議,我有一個問題,逃避,但它是用引號本身。而且,我不知道爲什麼,即使在逃跑的情況下,它也不適用於我正在使用的存儲庫,這是一個克隆的存儲庫(備份)。

所以,我創建了一個新的克隆庫和運行下面的轉義引號:

git filter-branch --tree-filter "sed -i.bkp s/\'ENV[GMAIL_SMTP_USER]\'/ENV[\'GMAIL_SMTP_USER\']/g config/environments/development.rb" -f 

有誰有一個更好的答案?也許可以解釋爲什麼它不能在第一個克隆庫中工作...

+0

你應該編輯你原來的帖子,而不是發佈回覆你自己的帖子。 – Jotne 2014-10-30 21:36:58

+0

@Jotne,Stack Exchange實際上鼓勵人們回答自己的問題。請參閱參考:http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ – 2014-10-30 21:45:17

+0

回答你自己的問題是可以的,但它不是好的在你的答案中提出更多問題。你應該在這個例子中編輯。 – 2014-10-30 22:02:04

2

逃生[]在搜索模式的\

echo "user_name: 'ENV[GMAIL_SMTP_USER]'," | sed "s/user_name: 'ENV\[GMAIL_SMTP_USER\]',/user_name: ENV['GMAIL_SMTP_USER'],/" 

輸出:

user_name: ENV['GMAIL_SMTP_USER'], 
+0

你的命令在終端上工作,但是當我把它放入git filter-branch參數中時,我收到以下錯誤:「s /」:未終止的替代模式。我已經通過在相同的存儲庫中轉義報價來找到解決方案。幸運的是,我正在研究真實存儲庫的克隆。我試圖在克隆的存儲庫中嘗試轉義引號,但我不知道爲什麼它不起作用。有了一個新的克隆存儲庫,它工作...去圖...我會發布答案,並upvote你指出一個可能的逃避問題!謝啦! – 2014-10-30 21:01:54