2013-03-22 84 views
0

我目前正在一個項目中,我想在多個地方更改圖片。greping和替換2個文件路徑

old file dir: /images/icons/helpPop.png 
    new file dir: /public/website_pngs/icons-buttons/button_question_mark.png 

我想嘗試

grep -rl 'images/icons/helpPop' . | xargs sed -i 's/images/icons/helpPop/public/website_pngs/icons-buttons/button_question_mark/g' 

但我知道這是行不通的。我正在查看分隔符,並希望獲得一些額外的建議。

+0

這不是清楚你想要做什麼 - 你想把文件從舊位置移動到新位置,或者是什麼? – 2013-03-26 20:25:40

回答

0
for i in grep -rl 'images/icons/helpPop' . ; do cp $i $i.bak; sed -i 's/images\/icons\/helpPop/public\/website_pngs\/icons-buttons\/button_question_mark/g' < $i.bak > $i; done 
+0

/g最後不是文件名。這會改變嗎? – 2013-03-22 14:18:04

+0

/g意味着「替換每個字符串的實例」;否則它只會替換第一個實例,然後轉到下一個文件。 – 2013-03-22 14:31:26

0

我期待到分隔符,並希望一些額外的建議,請。

一些建議:

  • 如果舊/新迪爾斯是固定的,儘量把它們保存到變量,例如sed的
  • 使用不同的分隔符"s#$old#$new#g" or "[email protected][email protected][email protected]"(雙引號!!)
  • 要更安全,您最好在舊的目錄文字中逃避. (period/dot)。因爲它表示正則表達式中的any char。它可能是一個危險的操作與這樣的純文本。 (幸運的是,您的路徑中沒有.*^_ ^)

或者您想要的工作代碼?

編輯發表評論:

你不需要「設置」分隔符,只是用它,就像你正在使用/,看看這個例子:

kent$ echo "/////"|sed 's#/#?#g' 
????? 

kent$ echo "/////"|sed 's^/^?^g' 
????? 

kent$ echo "/////"|sed 's%/%?%g' 
????? 

kent$ echo "/////"|sed 's;/;?;g' 
????? 
+0

會更想知道如何使用/設置分隔符 – 2013-03-22 14:20:38

+0

@SariRahal請參閱**編輯** – Kent 2013-03-22 14:24:27

+0

我有這個BC的問題我沒有在cygwin上的sed – 2013-03-22 14:43:02